Bash-如何按照从最旧到最新的顺序移动和重命名文件

Bash-如何按照从最旧到最新的顺序移动和重命名文件

所以我有一个正在尝试编写的脚本。它从一个目录中取出所有 .mp3 文件并将它们移动到另一个目录并按数字顺序命名它们,例如 0001.mp3、0002.mp3 等。

i=0
for f in *.mp3; do
i=$((i+1));
mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

现在我试图拥有它,以便上面的命令根据文件的旧时间进行移动和重命名。因此,它将采用最旧的文件并将其命名为 0001,第二旧的文件将是 0002。我该如何使用上面的脚本来做到这一点?我可以在其中添加几行,还是需要以不同的方式重写整个内容?

谢谢

答案1

您只需更改*.mp3$(ls -rt *.mp3)

i=0
for f in $(ls -rt *.mp3); do
    i=$((i+1));
    mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

-t按修改时间对文件进行排序,-r并使最旧的文件排在前面。

正如@Jeff 提到的,当文件名包含奇怪的字符时,上述方法不起作用。在这种情况下,你应该使用这个(仍然无法处理换行符):

i=0
ls -rt *.mp3 |
while read -r f; do
    i=$((i+1));
    mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

其中 的输出通过ls管道输送到整个while循环中。

相关内容