shell里给文件批量重命名的问题

shell里,我想给文件批量重命名,命名方式是「文件夹名-文件名.jpg」,比如 61/1.jpg 就命名成 61-1.jpg(文件夹名字是不固定的)。语句要怎么写呀?

阅读 4.1k
3 个回答

我一般都是把文件名字列出来到文本文件里,在文本文件里用正则替换生成新地址,然后在最前面价格 “mv ”

rename啊,和find连用,法力无边

find . -name "*.txt" -exec rename -n 's/(.*)\/(.*?)\/(.*?)\.txt/$1\/$2\/$2_$3.txt/g' {} \;

clipboard.png

用sed构造命令再执行,比较通用。

-> find . -name "*.txt" | sed -e "s,\.\/\(.*\)\/\(.*\)\.txt,mv -v  & ./\1_\2.txt,g" | xargs -I{} sh -c {}
‘./a/01.txt’ -> ‘./a_01.txt’
‘./a/02.txt’ -> ‘./a_02.txt’
‘./a/03.txt’ -> ‘./a_03.txt’
‘./a/04.txt’ -> ‘./a_04.txt’
‘./a/05.txt’ -> ‘./a_05.txt’
‘./a/06.txt’ -> ‘./a_06.txt’
‘./a/07.txt’ -> ‘./a_07.txt’
‘./a/08.txt’ -> ‘./a_08.txt’
‘./a/09.txt’ -> ‘./a_09.txt’
‘./a/10.txt’ -> ‘./a_10.txt’
‘./b/01.txt’ -> ‘./b_01.txt’
‘./b/02.txt’ -> ‘./b_02.txt’
‘./b/03.txt’ -> ‘./b_03.txt’
‘./b/04.txt’ -> ‘./b_04.txt’
‘./b/05.txt’ -> ‘./b_05.txt’
‘./b/06.txt’ -> ‘./b_06.txt’
‘./b/07.txt’ -> ‘./b_07.txt’
‘./b/08.txt’ -> ‘./b_08.txt’
‘./b/09.txt’ -> ‘./b_09.txt’
‘./b/10.txt’ -> ‘./b_10.txt’
‘./c/01.txt’ -> ‘./c_01.txt’
‘./c/02.txt’ -> ‘./c_02.txt’
‘./c/03.txt’ -> ‘./c_03.txt’
‘./c/04.txt’ -> ‘./c_04.txt’
‘./c/05.txt’ -> ‘./c_05.txt’
‘./c/06.txt’ -> ‘./c_06.txt’
‘./c/07.txt’ -> ‘./c_07.txt’
‘./c/08.txt’ -> ‘./c_08.txt’
‘./c/09.txt’ -> ‘./c_09.txt’
‘./c/10.txt’ -> ‘./c_10.txt’
‘./d/01.txt’ -> ‘./d_01.txt’
‘./d/02.txt’ -> ‘./d_02.txt’
‘./d/03.txt’ -> ‘./d_03.txt’
‘./d/04.txt’ -> ‘./d_04.txt’
‘./d/05.txt’ -> ‘./d_05.txt’
‘./d/06.txt’ -> ‘./d_06.txt’
‘./d/07.txt’ -> ‘./d_07.txt’
‘./d/08.txt’ -> ‘./d_08.txt’
‘./d/09.txt’ -> ‘./d_09.txt’
‘./d/10.txt’ -> ‘./d_10.txt’
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进