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
引用符の間に定義されたパターンに一致するファイルを見つける-delete
find コマンド結果の削除
編集:クリーナーは-delete
この記事に表示されているものと同じです。
テンプレートに一致するファイルを見つけて削除します。
答え3
名前が一致する空のディレクトリのみを削除するには、graphene-80*
次の手順を実行します。
find /tmp -type d -name "graphene-80*" -exec rmdir {} +
または
find /tmp -type d -name "graphene-80*" -delete
(rmdir
GNU findではnull以外のエラーが発生します。)
ディレクトリとそのコンテンツを削除するには、次の手順に従ってください。
find /tmp -type d -name "graphene-80*" -exec rm -r {} \; -prune
(ネストされた一致ディレクトリがあるとエラーが発生する可能性があります。存在しない場合は、削除した-exec rm +
ディレクトリにドロップダウンしようとするとエラーが発生する可能性があります。)rm
-prune
find
答え4
次のコマンドを使用できます。修正する
find /tmp -type d -name 'graphene-80*' -prune -exec rm -rf {} +