target
すべてのサブフォルダの1つのフォルダを削除する必要があります。
ベストアンサー1
そのようなディレクトリが数千を超えないことがわかっている場合は、次のコマンド設定とシェルオプションをtarget
使用できます。globstar
dotglob
bash
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
これはシェルを使用する場合、またはこのような数千のディレクトリがある場合に**
使用するコマンドです。
ディレクトリが多い場合でもtarget
1つずつ削除できます。
for dirpath in ./**/target/; do
rm -rf "$dirpath"
done
find
ただし、各ディレクトリに対して一度呼び出されるので、使用するよりも遅くなります。rm