如何在 for 循环中使用 echo 或 printf 只打印一次

How to print only one occurence with echo or printf in a for loop

我有一个文件夹 TEST,其中有一些文件(出现 abc)我想删除。我使用:

for filename in TEST/*; do  
   if [ -f "$filename" ]; then 
       if [[ "$filename" == *abc* ]]; then  
             rm $filename  && echo "The files $filename are well deleted" ; 
             else printf  "The files were already deleted" ; 
       fi; 
   fi; 
done

我想要的是只打印一次 "The files were already deleted"。例如,删除出现 abc 的文件后,如果文件夹 TEST 中仍有 4 个文件,则会打印句子 "The files were already deleted" 4 次,而不是像我想要的那样到.

有什么想法吗?

我不明白你为什么要为此使用循环。

rm TEST/*abc*

应该这样做,尽管它不会报告每个文件。它可能会抱怨匹配的目录。

如果您需要报告-

found=0
while IFS= read -rd '' f
do rm $f && echo "deleted '$f'"
   found=1
done < <( find TEST/ -name '*abc*' -type f -print0 )
(( found )) || echo "The files were already deleted"