Bash Shell脚本将删除一些文件

Bash Shell脚本将删除一些文件,bash,shell,mv,file-management,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 我发现您的

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

(( i = 1 )) 

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

我发现您的代码中存在两个风险问题:

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

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


顺便说一句,如果
mv
失败,您的计数器(
i
)不会增加。我不知道这是一个bug还是出于设计原因。

该代码重命名任何名称不同于“change filename.sh”的文件。我怀疑change-filename.sh是一个脚本?您可能希望在重命名之前测试目标名称是否存在。再看看mmv(1)。是的,你是对的。谢谢,谢谢。我将添加条件以控制不良结果。除了用ls生成文件名列表之外,还有更合适的方法获取目录中的文件名吗?顺便说一句,这是设计的。