我需要对一个文件夹中的40000个文件进行批处理重命名,其末尾的数字如下: something.jpg到something_00001.jpg。我想使用重命名命令,但是任何有效的方法都可以。有帮助吗?谢谢!
答案 0 :(得分:2)
这些功能强大的命令将非常快速地进行大量更改-请对一小部分数据进行测试。
方法1-使用“重命名”(Perl工具)
这应该与rename
一起使用,您可以通过以下方式将其安装在macOS上:
brew install rename
命令为:
rename --dry-run -N "00001" 's/.jpg$/_$N.jpg/' *jpg
删除--dry-run
即可实际执行命令,而不仅仅是告诉您它将执行的操作。
方法2-使用GNU Parallel
或者,它应该与 GNU Parallel 一起使用,您可以通过以下方式将其安装在macOS上:
brew install parallel
命令为:
find . -name \*.jpg -print0 | parallel -0 --dry-run mv {} {.}_{#}.jpg
其中:
{}
表示“当前文件” ,{.}
表示“当前文件减去扩展名” ,并且{#}
的意思是“(顺序的)工作编号” 删除--dry-run
即可实际执行命令,而不仅仅是告诉您它将执行的操作。
您提到想要补偿,所以以下内容的补偿为3:
find . -name \*.jpg -print0 | parallel -0 'printf -v new "%s_%05d.jpg" "{.}" $(({#}+3)); echo mv "{}" "$new"'
方法3-无需其他软件
这只能使用标准的内置工具来工作:
#!/bin/bash
for f in *.jpg; do
# Figure out new name
printf -v new "%s_%05d.jpg" "${f%.jpg}" $((cnt+=1))
echo Would rename \"$f\" as \"$new\"
#mv "$f" "$new"
done
删除倒数第二行中的#
即可进行重命名。
方法4-无需其他软件
这应该仅使用标准的内置工具即可工作。请注意,macOS附带了Perl,并且它应该更快,因为它不会像以前的方法那样为40,000个文件中的每个文件启动新的mv
进程。相反,Perl仅启动一次,它读取find
传递给它的以空值结尾的文件名,然后为每个文件执行库调用:
find . -name \*.jpg -print0 | perl -0 -e 'while(<>){ ($sthg=$_)=~s/.jpg//; $new=sprintf("%s_%05d.jpg",$sthg,++$cnt); printf("Rename $_ as $new\n"); }'
如果看起来正确,请更改最后一行,以便实际上进行重命名,而不只是告诉您它将做什么:
find . -name \*.jpg -print0 | perl -0 -e 'while(<>){ ($sthg=$_)=~s/.jpg//; $new=sprintf("%s_%05d.jpg",$sthg,++$cnt); mv $_, $new; }'
答案 1 :(得分:0)
这是使用renamer的解决方案。
$ tree
.
├── beach.jpg
├── sky.jpg
$ renamer --path-element name --index-format %05d --find /$/ --replace _{{index}} *
$ tree
.
├── beach_00001.jpg
├── sky_00002.jpg