centos 如何批量替换文件名

文件夹下面的文件太多,无法直接用 rename aa bb *.jpg

执行就会提醒:-bash: /usr/bin/rename: Argument list too long

百度找到的方法

for i in `ls *.jpg`
do
    rename "aa" "bb" $i
done
find . -name *.jpg -exec rename aa bb {} +

出错:-bash: /bin/find: Argument list too long

上面方法也都不能用,请教懂的同学指点一下,如何快速批量替换文件夹下面的文件名,大概有几十万个文件吧。

阅读 3.7k
2 个回答

ls *.jpg 会列举出所有的 .jpg 文件。

find . -name *.jpg 因为没有用单引号包围 *.jpg,因此被 shell 自动扩展成所有的 .jpg 文件。

注意, find xxx -exec xxx {} + 将会对多个文件执行一次操作,而 find xxx -exec xxx ; 是逐个文件操作。详细用法请查 man find

参考

find -type f -name '*.jpg' -execdir rename aa bb {} \;
find -name '*.jpg' -print0 | xargs -0 rename 'aa' 'bb'

随手写的,未测试,不过应该是OK的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进