如果有与您的文件规范匹配的奇怪命名的文件,那么您正在做的事情是有问题的。如果将 find 的输出通过管道传输到 xargs,您将遇到由来已久的Parsing LS问题
[ghoti@pc ~/tmp2]$ touch $'one\ntwo.txt' "three four.txt"
[ghoti@pc ~/tmp2]$ find . -name "*txt" -type f -print | xargs rm
rm: ./three: No such file or directory
rm: four.txt: No such file or directory
rm: ./one: No such file or directory
rm: two.txt: No such file or directory
为什么不直接处理你的rm
inside find
?
find /dir -name "filename*" -type f -exec rm {} \;
要测试您的结果,您可以抓取$?
:
find /dir -name "filename*" -type f -exec rm {} \;
result=$?
case "$result" in
etc, etc
(我放入$?
了一个变量,以防以后重新使用它会很有用,或者如果其他命令需要find
在其返回值被评估的位置之间运行。)
或者您可以直接测试是否成功:
if find /dir -name "filename*" -type f -exec rm {} \;
then
echo "SUCCESS!"
else
echo "FAIL!"
fi
更新:
根据评论...如果您不必通过子目录递归,那么 for 循环可能就足够了。
for file in *.txt; do
if ! rm "$file"; then
echo "ERROR: failed to remove $file" >&2
fi
done
或者,如果您不需要在单个文件上生成错误的粒度:
rm *.txt || echo "ERROR" >&2
我不认为我可以让它变得更小。:-P