Shell脚本删除了一些文件

时间:2018-12-28 10:54:34

标签: bash shell mv file-management

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

(( i = 1 )) 

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

1 个答案:

答案 0 :(得分:1)

我在您的代码中看到了两个危险的问题:

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

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

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