我有一个用于分类花的神经网络项目。我有一个花的数据集,我想将所有雏菊图像重命名为daisy1,daisy2等。为此,我编写了一个shell脚本,但是我注意到,每次运行该脚本时,都会丢失一些图像,并且我不明白为什么。任何想法?这是我的脚本:
(( i = 1 ))
for file in $(ls)
do
[ "$file" != "change-filenames.sh" ] && mv "$file" "daisy$i" && (( i++ ))
done
答案 0 :(得分:1)
我在您的代码中看到了两个危险的问题:
(1)您正在使用ls
生成文件名列表(例如,如果文件名包含空格,则将产生奇怪的结果)。
(2)假设您的目录最初包含文件abc
和daisyabc1
。第一次重命名将是mv abc daisyabc1
,因此会破坏原始的daisyabc1
。这样,第二次重命名将是mv daisyabc1 daisydaisyabc2
,您最终只会得到一个文件,而原来只有两个文件。我想这是造成文件丢失的原因。
顺便说一句,如果i
失败,您的计数器(mv
)不会增加。我不知道这是错误还是设计使然。