它在Mac OS 10.11上。
批量重命名文件时,可能会发生文件删除。 示例:1.txt,2.txt,3.txt应该重命名为3.txt,2.txt,1.txt 按照常规方式,1.txt变为3.txt(删除原始的3.txt),2.txt 2.txt,然后3.txt(原始的1.txt)再次变为1.txt。仅保留1.txt和2.txt。
为禁止这种情况,第一步,我为所有输入名称添加了随机名称后缀;在第二步中,我将后缀名称更改为其最终输出名称。完整示例-请保存到sh文件并为您自己测试:
#!/bin/sh
set -u -x
echo 1 > 1.txt
echo 2 > 2.txt
echo 3 > 3.txt
InputFiles=(1.txt 2.txt 3.txt)
OutputFiles=(3.txt 2.txt 1.txt)
suffix="_rename_cnowjfo_"
i=0
count=3
while (( i < count )); do
mv "${InputFiles[i]}" "${InputFiles[i]}$suffix"
i=$(( i + 1 ))
done
#sleep 3
i=0
while (( i < count )); do
mv -n "${InputFiles[i]}$suffix" "${OutputFiles[i]}"
echo $?
#sleep 0.5
i=$(( i + 1 ))
done
重复两次({1..3} .txt-{3..1} .txt和{1..3} .txt-{3..1} .txt)以重置原始名称第一次可以正常运行,但是第二次,由于未知原因,删除了1.txt 。
第二次执行-v:
+ (( i < count ))
+ mv 1.txt 1.txt_rename_cnowjfo_
+ i=1
+ (( i < count ))
+ mv 2.txt 2.txt_rename_cnowjfo_
+ i=2
+ (( i < count ))
+ mv 3.txt 3.txt_rename_cnowjfo_
+ i=3
+ (( i < count ))
+ i=0
+ (( i < count ))
+ mv -n 1.txt_rename_cnowjfo_ 3.txt
+ echo 0
0
+ i=1
+ (( i < count ))
+ mv -n 2.txt_rename_cnowjfo_ 2.txt
+ echo 0
0
+ i=2
+ (( i < count ))
+ mv -n 3.txt_rename_cnowjfo_ 1.txt
+ echo 0
0
+ i=3
+ (( i < count ))
现在我取消注释上面的sleep命令,一切似乎都按预期工作。似乎,如果没有sleep命令,则mv可能即使退出也无法完成其工作。
如果我手动执行所有6条命令,也会发生同样的情况:
mv 1.txt 1.txt_rename_cnowjfo_; mv 2.txt 2.txt_rename_cnowjfo_; mv 3.txt 3.txt_rename_cnowjfo_; mv 1.txt_rename_cnowjfo_ 3.txt; mv 2.txt_rename_cnowjfo_ 2.txt; mv 3.txt_rename_cnowjfo_ 1.txt
在我测试的所有文件系统上都发生了同样的情况:MAC OS扩展,ExFAT和FAT16。
在未完全完成工作的情况下如何退出电视?
答案 0 :(得分:1)
由于我的错,该解决方案非常简单-没有使用Shell检查最终结果,而是使用Finder应用程序检查了最终结果。 Finder似乎对快速的更改不知所措,并且仅在杀死并重新启动后会显示所有3个文件。 ls
立即显示所有3个文件都已正确重命名。
从不依赖GUI来获取文件的可靠视图!