すべてのサブディレクトリで一致するファイルを削除する


77

Linuxのすべてのサブディレクトリにあるすべての.swpファイルを削除するにはどうすればよいですか?


3
rmを使用する代わりに、trash-cliなどのプログラムを忘れずに削除してください。code.google.com/p/trash-cli (以下のすべての回答で「rm」を「trash」に置き換えるだけです。)

回答:


137

現在のディレクトリの下にあるすべての* .swpファイルを削除しfind、次のいずれかの形式でコマンドを使用します。

  • find . -name \*.swp -type f -delete

    この-deleteオプションは、findが一致するファイルを直接削除することを意味します。これは、OPの実際の質問に最適です。

    を使用-type fすると、findはファイルのみを処理します。

  • find . -name \*.swp -type f -exec rm -f {} \;
    find . -name \*.swp -type f -exec rm -f {} +

    オプションを-exec使用すると、ファイルごとに任意のコマンドを実行できます。最初のバリアントはファイルごとに1回コマンドを実行し、2番目のバリアントはできるだけ{}多くのパラメーターに置き換えて、できるだけ少ないコマンドを実行します。

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

    出力のパイピングはxargs、で可能なものよりも複雑なファイルごとのコマンドで使用されます-exec。このオプション-print0find、改行ではなくASCII NULLで一致を分離するように-0指示xargsし、NULLで区切られた入力を期待するように指示します。これにより、空白を含むファイル名に対してパイプ構造が安全になります。

man find詳細と例を参照してください。


16

find . -name '*.swp' -delete

削除自体を行うと、ファイル名に埋め込まれたスペースのリスクがなくなります。セキュリティを強化する-type fために、ファイルのみの追加も検討してください。


4
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp

2

ホームディレクトリの下で(およびGNU 'find'および 'xargs'を使用して)検索するには、次を使用します。

find $HOME -name '*.swp' -print0 | xargs -0 rm -f

-print0」と「-0」の使用は、名前がASCII NUL「\ 0」文字で区切られることを意味し、これは名前に空白などを含むファイルパスを処理します。「.swp」で終わるディレクトリの下にディレクトリ(またはデバイスファイル、FIFO、またはその他の非ファイル)があると思われる場合は、「find」に「-type f」オプションを追加できます。ディレクトリしかない場合、上記のコマンドはそれらをノイズで削除できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.