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 命令的日志。