重命名 Shell 循环脚本中的文件

Renaming files in Shell script for loop

我 运行 OS X 并且有多张照片并开始将它们命名为 xyz-100.jpgxyz-101.jpgxyz-102.jpg 直到 xyz-402.jpg 和现在想通过基本上将数字减少 99 来重命名它们,使其成为 xyz-1.jpgxyz-2.jpgxyz-303.jpg.

我知道我可以为此使用 mv 命令,但我似乎无法在文件名中实现变量,例如 xyz-$reduced.jpg。我怎样才能正确地做到这一点?

像这样的东西应该有用。但我不确定你是如何获得文件数量的。您还可以 cat 列出文件名的另一个文件的输出,效果与此相同。但这应该让你开始

num_array=(1 2 3 4 5)

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

我强烈建议您将它们移动到另一个目录,否则您 运行 如果中途发生一些不好的事情,您可能会感到困惑。所以尝试:

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 生成您想要的名称。