Shell 脚本删除了一些文件

Shell Script Removes Some of the Files

我有一个用于对花卉进行分类的神经网络项目。我有一个鲜花数据集,我想将所有雏菊图像重命名为 daisy1、daisy2 等。为此,我写了一个 shell 脚本,但我注意到每次 运行 脚本都会丢失一些图像,我不明白为什么。任何想法?这是我的脚本:

(( i = 1 )) 

for file in $(ls)
do
[ "$file" != "change-filenames.sh" ] && mv "$file" "daisy$i" && (( i++ ))
done

我在您的代码中看到两个有风险的问题:

(1) 您正在使用 ls 生成文件名列表(例如,如果文件名包含空格,这将产生奇怪的结果)。

(2) 假设您的目录最初包含文件 abcdaisyabc1。第一次重命名将是 mv abc daisyabc1,因此会破坏原来的 daisyabc1。第二次重命名将是 mv daisyabc1 daisydaisyabc2,您最终将只有一个文件,而您原来有两个文件。我想这就是你丢失文件的原因。

顺便说一句,如果 mv 失败,您的计数器 (i) 不会增加。我不知道这是一个错误还是设计使然。