filespecに一致する奇妙な名前のファイルがある場合、あなたがしていることは問題があります。findの出力をxargsにパイプすると、昔ながらの解析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
内で直接処理してみません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