findなしでrm `find lib / -name *.swp`と同等のものは何ですか?

findなしでrm `find lib / -name *.swp`と同等のものは何ですか?

lib最後に、ディレクトリ内のすべてのファイルを削除したいと思います。.swp

次のことなくどのようにこれを行うことができますかfind

rm `find lib/ -name *.swp`

答え1

照会の良い点は再帰的であるということです。一部の最新のシェルは検索再帰を提供しますが、POSIXと互換性がないため、どこでも動作することに頼ることはできません。以下は、bash 4.0以降で実行される例です。

shopt -s globstar
for f in **/*.swp; do
    rm -- "$f"
done

すでに持っている find コマンドの場合、スペースを含むすべてのファイル (スペースなど) が削除されます。以下は固定例です。

find lib/ -name '*.swp' -exec rm {} +

一部のバージョンでは、次のものをfind使用できます-delete

find lib/ -name '*.swp' -delete

答え2

cd lib && ls -R  | grep '\.swp$' | xargs -d '\n' rm

ソースの場合は、次のようにします。

find lib -name '*.swp' | xargs -d '\n' rm

find結果が返されない場合、エラーは発生しないためです。

呼び出されるディレクトリは削除できないため、返さない場合は\! -type dsoを使用できます。ディレクトリが後ろにあるため、正規表現と一致しないため、私の選択肢と同様の操作を実行できます。find*.swprmls -RF/

関連情報