如何在 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"
我有一个文件夹 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"