linux - 递归重命名所有子目录中的 .jpg 文件

标签 linux perl bash recursion

我在 Linux 系统上,我试图将许多子目录中的所有 .jpg 文件重命名为顺序文件名,因此每个子目录中的所有 jpeg 文件都重命名为 0001.jpg、0002.jpg 等。我有一个 '在单个目录中工作的重命名'命令:

rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' *.jpg

我正在尝试这样使用它:

for i in ls -D; do rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' *.jpg; done

但是对于输出我得到这个:

*.jpg renamed as 0001.jpg

对于每个子目录。我做错了什么?

最佳答案

您需要将命令放在反引号中(或使用 $( ... ) bash 语法)以便 迭代它的输出。还可以将 $i 变量与 *.jpg 文件一起使用 名称模式,例如

for i in `ls -D`
do
    rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' $i/*.jpg
done

但是,对于这种情况,您想要遍历所有子目录,并且您是 最好使用 find 命令:

for i in `find . -type d`; do rename ...

关于linux - 递归重命名所有子目录中的 .jpg 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378365/

相关文章:

perl - 是否可以在 Perl 中将 'é' 打印为 '%C3%A9' ?

bash - 如何使用 sed 将行附加到空文件,而不是 echo?

linux - 如何在 Debian Linux 中检查驱动器是否存在

c++ - 编译 proftpd 并在安装目录中包含库拷贝

linux - 在本地主机中链接(LAMP)

perl - LWP::UserAgent 更改 SSL 实现

multithreading - 将线程迁移到分支

bash - 在 shell 脚本中使用变量作为命令行输入

angular - 一次更新所有过时的 Angular 包

linux - 我想通过 shell 脚本将不同的输入参数传递给一个 jar