我有一个目录名,dir1
其中包含名为 1,2,3,4,5 的其他目录。现在我想将目录 1 重命名为 4,2 => 5,3 => 6,4 => 5。但我的问题是使用mv
shell 脚本中的命令成功重命名目录 1,2,3,但在重命名目录 4 的情况下,目录 1 被替换为 5。我该如何循环重命名这些文件,以使先前重命名的文件不会发生变化。
答案1
你在这里做的事情有点奇怪。结果名称将是:
5 (was: 1)
6 (was: 3)
第一个操作 (mv 1 4) 会删除原始的“4”目录并将其替换为 1。有几种方法可以解决这个问题,我能想到的两种方法是:
- 将所有目录重命名为带有后缀(例如 .old)的文件,然后将每个目录重命名为所需的名称,或者
- 只需在第一个操作之前执行最后一个操作(mv 4 5)。
对于第一个选项,你可以这样做:
for file in 1 2 3 4; do mv $file $file.old; done
mv 1.old 4
mv 2.old 5 # actually rather redundant since it would be overwritten anyway
mv 3.old 6
mv 4.old 5