web-dev-qa-db-ja.com

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

Linux上のすべてのサブディレクトリにあるすべての.swpファイルを削除する方法を教えてください。

69
Alex

現在のディレクトリの下にあるすべての* .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はfindがファイルごとに任意のコマンドを実行することを可能にします。最初の方法ではファイルごとに1回コマンドを実行し、2番目の方法では{}をできるだけ多くのパラメータに置き換えて、できるだけ少ないコマンドで実行します。

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

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

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

130
Lachlan Roche

find . -name '*.swp' -delete

削除することでファイル名に埋め込まれたスペースの危険性が取り除かれます。セキュリティをさらに高めるために、ファイル専用に-type fを追加することも検討してください。

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

バッシュ4.0

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

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

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

'-print0'および '-0'の使用は、名前がASCII NUL '\ 0'文字で区切られることを意味し、これは名前の中にブランクなどのあるファイルパスを処理します。ディレクトリの下にディレクトリ(またはデバイスファイル、FIFO、その他のファイル以外)が '.swp'で終わっている可能性があると思われる場合は、 '-type f'オプションを 'find'に追加することができます。ディレクトリしかない場合は、上記のコマンドを実行してもディレクトリの削除に失敗します。

2