所以我有一个正在尝试编写的脚本。它从一个目录中取出所有 .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
循环中。