2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

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

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

回答 (5)

147
147
147
2010-02-22 13:59:15 +0000

カレントディレクトリの下にある全ての*.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 を参照してください。

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

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

4
4
4
2010-02-22 14:11:50 +0000
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
2
2
2010-02-22 14:04:52 +0000

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

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

-print0’ と ‘-0’ の使用は、名前が ASCII NUL ‘\0’ 文字で区切られることを意味します。もし、’.swp’ で終わるディレクトリの下にディレクトリ (またはデバイスファイル、FIFO、その他の非ファイル) があるかもしれないと思うなら、'find’ に ‘-type f’ オプションを追加することができます。ディレクトリだけがある場合は、上記のコマンドを実行してもノイズの多い削除に失敗します。

0
0
0
2019-11-17 04:04:10 +0000

すべてのサブフォルダからすべてのファイルを削除したい場合は、

$ find . -name \* -type f -delete
```のコマンドを使用することができます。