在Shell脚本中重命名文件以进行循环

时间:2017-04-25 20:26:57

标签: bash macos shell file renaming

我运行OS X并拥有多张照片,并开始将它们命名为xyz-100.jpgxyz-101.jpgxyz-102.jpg,最多为xyz-402.jpg,现在想要通过基本减少数量来重命名它们到99,将xyz-1.jpgxyz-2.jpg提升到xyz-303.jpg

我知道我可以使用mv命令,但我似乎无法在文件名中实现变量,例如xyz-$reduced.jpg。我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效。但我不确定你是如何获得文件数量的。您还可以将列出文件名的另一个文件的输出捕获到与此相同的效果。但这应该让你开始

num_array=(1 2 3 4 5)

for i in "${!num_array[@]}"; do
       mv -i ./"myfile_${i}.jpg" /somehwere_else
done

答案 1 :(得分:1)

我强烈建议您将它们移动到另一个目录,否则如果在中途发生不良事件,您将面临混淆的风险。所以试试:

mkdir tmp
for ((n=100; n<=402; n++)); do 
  ln xyz-$n.jpg tmp/xyz-$((n-99)).jpg
done

这应该会在tmp/内为您提供所需的文件。然后,您可以将该目录移动到您喜欢的位置并删除旧文件。如果您不熟悉ln,请将其视为mv的一半。基本上mv foo barln foo bar; rm foo相同。通过链接子目录中新命名的文件,您不会发现任何冲突,试图确定文件150是否真的是150或者是否重命名为249.此外,不是迭代现有文件并尝试解析数字,只需使用jot生成您想要的名称。