bash 中的多重和递归文件重命名
Multiple and recursive file renaming in bash
在 Linux
我有一个结构如下的文件夹:
.
├── a
│ ├── 00000400000000030bfd.dat
│ ├── 10000400000000030bfd.dat
│ ├── 20000400000000030bfd.dat
│ ├── etc....
├── b
│ ├── 00000401000000030bfd.dat
│ ├── 10000401000000030bfd.dat
│ ├── 20000401000000030bfd.dat
│ ├── etc....
├── c
│ ├── 00000402000000030bfd.dat
│ ├── 10000402000000030bfd.dat
│ ├── 20000402000000030bfd.dat
│ ├── etc....
├── d
│ ├── etc....
├── e
│ ├── etc....
├── f
依此类推,直到 "p"
文件夹。我想使用 bash
脚本将每个目录中的每个 .dat
文件重命名为 .html
文件。我该怎么做?
使用循环。
for file in {a..p}/*.dat ; do
mv "$file" "${file%.dat}.html"
done
${file%.dat}
从 $file
.
的值末尾删除 .dat
这是一个使用所有传统命令的版本:
find log -name "*.dat" |
sed 's/.log$//;s/mv &.dat &.html/' |
bash
本质上,find
创建目标名称列表,sed
使名称通用,然后生成一个 mv
命令进行重命名,然后将结果通过管道传输到 bash
执行。
可以省略bash
命令,仅获取眼球测试的mv命令列表。您还可以将 -x
添加到 bash
命令以获取每个执行的 mv
命令的日志。
在 Linux
我有一个结构如下的文件夹:
.
├── a
│ ├── 00000400000000030bfd.dat
│ ├── 10000400000000030bfd.dat
│ ├── 20000400000000030bfd.dat
│ ├── etc....
├── b
│ ├── 00000401000000030bfd.dat
│ ├── 10000401000000030bfd.dat
│ ├── 20000401000000030bfd.dat
│ ├── etc....
├── c
│ ├── 00000402000000030bfd.dat
│ ├── 10000402000000030bfd.dat
│ ├── 20000402000000030bfd.dat
│ ├── etc....
├── d
│ ├── etc....
├── e
│ ├── etc....
├── f
依此类推,直到 "p"
文件夹。我想使用 bash
脚本将每个目录中的每个 .dat
文件重命名为 .html
文件。我该怎么做?
使用循环。
for file in {a..p}/*.dat ; do
mv "$file" "${file%.dat}.html"
done
${file%.dat}
从 $file
.
.dat
这是一个使用所有传统命令的版本:
find log -name "*.dat" |
sed 's/.log$//;s/mv &.dat &.html/' |
bash
本质上,find
创建目标名称列表,sed
使名称通用,然后生成一个 mv
命令进行重命名,然后将结果通过管道传输到 bash
执行。
可以省略bash
命令,仅获取眼球测试的mv命令列表。您还可以将 -x
添加到 bash
命令以获取每个执行的 mv
命令的日志。