重命名 Shell 循环脚本中的文件
Renaming files in Shell script for loop
我 运行 OS X 并且有多张照片并开始将它们命名为 xyz-100.jpg
、xyz-101.jpg
、xyz-102.jpg
直到 xyz-402.jpg
和现在想通过基本上将数字减少 99 来重命名它们,使其成为 xyz-1.jpg
、xyz-2.jpg
到 xyz-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 bar
与 ln foo bar; rm foo
相同。通过在子目录中链接新命名的文件,您将不会在尝试确定文件 150 是否真的是 150 还是重命名的 249 时遇到任何冲突。此外,无需遍历现有文件并尝试解析数字, 只需使用 jot
生成您想要的名称。
我 运行 OS X 并且有多张照片并开始将它们命名为 xyz-100.jpg
、xyz-101.jpg
、xyz-102.jpg
直到 xyz-402.jpg
和现在想通过基本上将数字减少 99 来重命名它们,使其成为 xyz-1.jpg
、xyz-2.jpg
到 xyz-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 bar
与 ln foo bar; rm foo
相同。通过在子目录中链接新命名的文件,您将不会在尝试确定文件 150 是否真的是 150 还是重命名的 249 时遇到任何冲突。此外,无需遍历现有文件并尝试解析数字, 只需使用 jot
生成您想要的名称。