特定の文字列で始まるすべてのディレクトリを削除する

特定の文字列で始まるすべてのディレクトリを削除する

graphene-80で始まるすべてのディレクトリを削除するには、どのコマンドを使用する必要がありますか/tmp

rmコマンドにオプションとして何を追加できますか?

答え1

パターンに一致するディレクトリの削除graphene-80* すぐ下/tmp、使用

rm -rf /tmp/graphene-80*/

ここでは、末尾は名前がパターンと一致するディレクトリ(またはディレクトリへのシンボリックリンク)のみを削除し、/ファイルなどを削除しないようにします。graphene-80*

他の場所で一致するディレクトリを見つけて/tmp削除するには(どこにいても)、次を使用します。

find /tmp -type d -name 'graphene-80*' -prune -exec rm -rf {} +

ディレクトリを削除するときにディレクトリ名をさらに表示するには、-print前に挿入します-exec

私たちが探している名前のディレクトリのテスト-type dとテストの両方です。-name 'graphene-80*'検索パスから-prune見つかったディレクトリを削除し(削除されたディレクトリ内を見たくない)、最後に次のように呼び出して-exec実際の削除を実行します。rm


コメントの質問に対する回答:「このディレクトリ内のすべてのファイルを削除するにはどうすればよいですか(ディレクトリ自体は削除しません)?」

次のいずれか:

  • ディレクトリを削除して再作成します。

    find /tmp -type d -name 'graphene-80*' -prune \
        -exec rm -rf {} \; -exec mkdir {} +
    

    あるいは、両方の操作をまとめてより効率的に実行できます。

    find /tmp -type d -name 'graphene-80*' -prune \
        -exec sh -c 'rm -rf "$@"; mkdir "$@"' sh {} +
    

    この方法の利点は、コマンドが簡単であることです(以下のコマンドと比較して)。

  • 見つかったディレクトリから名前(ファイルとディレクトリ)のみを削除するには、小さなインラインシェルスクリプトを使用します。

    find /tmp -type d -name 'graphene-80*' -prune -exec bash -O nullglob -O dotglob -c '
        for dirpath do
            rm -rf "$dirpath"/*
        done' bash {} +
    

    bashこれにより、一括検出されたディレクトリパス名を含む小さなインラインスクリプトが実行されます。シェルはシェルオプションセットnullglobで始まります。dotglobこのnullglobオプションは、一致しないシェルパターンを次に拡張します。何もない拡張されていないままにする代わりに、dotglobシェルオプションを使用して非表示の名前を一致させます(デフォルトでは非*表示の名前と一致しません)。スクリプトは指定されたディレクトリパスを繰り返し、各ディレクトリを再帰的に空にします。

    これの利点は、マウントポイントとなるディレクトリパスの検索を完全に処理できることです。欠点は、コマンドが複雑であり、コマンドが実行する操作を説明するためにこれらのテキストをすべて書き込む必要があるという事実です(これは、次の人がスクリプトのメンテナンスを引き継ぐのが難しいことを意味します)。

答え2

使用探す注文する:

find /tmp -type d -name 'graphene-80*' -delete

使用されるパラメータ:

  • -typeディレクトリのみをフィルタリングしてファイルを検索しない
  • -name引用符の間に定義されたパターンに一致するファイルを見つける
  • -deletefind コマンド結果の削除

編集:クリーナーは-deleteこの記事に表示されているものと同じです。 テンプレートに一致するファイルを見つけて削除します。

答え3

名前が一致する空のディレクトリのみを削除するには、graphene-80*次の手順を実行します。

find /tmp -type d -name "graphene-80*" -exec rmdir {} +

または

find /tmp -type d -name "graphene-80*" -delete

rmdirGNU findではnull以外のエラーが発生します。)

ディレクトリとそのコンテンツを削除するには、次の手順に従ってください。

find /tmp -type d -name "graphene-80*" -exec rm -r {} \; -prune

(ネストされた一致ディレクトリがあるとエラーが発生する可能性があります。存在しない場合は、削除した-exec rm +ディレクトリにドロップダウンしようとするとエラーが発生する可能性があります。)rm-prunefind

答え4

次のコマンドを使用できます。修正する

find /tmp -type d -name 'graphene-80*' -prune -exec rm -rf {} +

関連情報