すべてのサブフォルダから「ターゲット」フォルダを削除します。

すべてのサブフォルダから「ターゲット」フォルダを削除します。

targetすべてのサブフォルダの1つのフォルダを削除する必要があります。

ベストアンサー1

そのようなディレクトリが数千を超えないことがわかっている場合は、次のコマンド設定とシェルオプションをtarget使用できます。globstardotglobbash

shopt -s globstar dotglob

その後、使用

rm -rf ./**/target/

targetこれにより、現在のディレクトリまたはその下に呼び出されたすべてのディレクトリが削除されます。末尾のスラッシュは非常に重要です。そうしないと、パターンがディレクトリではなくコンテンツと一致する可能性があるためです。

この**モードはシェルオプションを設定することで有効になり、サブディレクトリglobstarと「再帰的に」一致します。これも設定されているので、隠しサブディレクトリの下に呼び出されたディレクトリdotglobも探しますtarget(そうfindなります)。

macOSでは基本 bashシェルオプションをサポートするには古すぎるため、以下を使用してglobstar最新バージョンをインストールする必要があります。bash自分で作った、またはzsh(現在新しいmacOSユーザーアカウントのデフォルトシェル)に切り替えます。

を使用すると、zsh次のコマンドを使用してこれを実行できます。

rm -rf ./**/target(/D)

これは(/D)、「ディレクトリのみが一致し、隠されたディレクトリを含む」ことを意味します。 globは**デフォルトで有効になっていますzsh


そしてfind

find . -depth -type d -name target -exec rm -rf {} +

targetその後、現在のディレクトリまたはその下にあるすべてのディレクトリを見つけて、1rm -rf回の呼び出しでできるだけ多くのディレクトリを削除します。この-depthオプションはfind深度優先検索を実行します(削除したばかりのディレクトリを検索しないことを願っています)。

shこれはシェルを使用する場合、またはこのような数千のディレクトリがある場合に**使用するコマンドです。

ディレクトリが多い場合でもtarget1つずつ削除できます。

for dirpath in ./**/target/; do
    rm -rf "$dirpath"
done

findただし、各ディレクトリに対して一度呼び出されるので、使用するよりも遅くなります。rm

おすすめ記事