回答:
xargs すべての魔法をします:
find . -name test -type d -print0|xargs -0 rm -r --
xargs 引数として渡されたコマンドを、stdinに渡された引数とともに実行します。
これはrm -r、ディレクトリとそのすべての子を削除するために使用しています。
--は、引数の終わりを示します。これは、で始まるパスが-引数として扱われないようにするためです。
-print0改行の代わりに文字findを印刷するように指示します\0。そして、-0告げるxargsだけで治療するための\0引数の区切りとして。
これはrm、多くのディレクトリを一度に呼び出してrmいるため、ディレクトリごとに個別に呼び出すオーバーヘッドが回避されます。
別の方法として、選択findした各ファイルに対してコマンドを実行することもできます。
find . -name test -type d -exec rm -r {} \;
そして、これrmは複数のディレクトリを一度に呼び出すため、パフォーマンスが向上します:
find . -name test -type d -exec rm -r {} +
(+最後に注意してください。これはxargsソリューションと同等です。)
xargsコマンドがうまく働きました。
find /path/to/dir -name "test" -type d -delete
-name:渡された名前を探します。-regex正規表現に基づいて名前を提供するために使用できます
-type:ファイルタイプを探します。dディレクトリのみを探す
-delete:見つかったリストを削除するアクション。
代わりに:
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
以下のようJFセバスチャンはコメントで次のように述べました。
+代わりに\;を使用して、一度に複数のディレクトリを渡すことができます。
+代わりに使用\;して、一度に複数のディレクトリを渡すことができます。
これを行う別の方法は
find . -name test -exec rm -R "{}" \;
検索に関する役立つリンク:http : //www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml
別の答えが指摘するように、名前を持つすべてのディレクトリを見つけてtest削除することができます
find -name "test" -type d -delete
Macでの相互互換性に関するいくつかの問題に遭遇したため、この同等のコマンドを使用しました。
find -path "*/test" -type d -delete
ただし、いずれの場合でも、指定されたディレクトリのいずれかにtestファイルが含まれている場合、、およびディレクトリの削除に失敗するfindことを訴えDirectory is not emptyます。
ディレクトリを含むすべてのファイルを削除する場合testは、同じトリックを使用して、test最初に指定されたディレクトリ内のすべてのファイルを削除できます。
find -path "*/test/*" -delete
パターン:は"*/test/*"、という名前のディレクトリ内のファイルのみを削除することを保証します/test/。ディレクトリが空になったら、最初のコマンドを使用してディレクトリを削除できます。
find -path "*/test" -type d -delete
例:
$ tree
.
├── mytest
│ └── test
│ └── blah.txt
├── test
│ ├── bar.jpg
│ └── dir
│ └── bar.bak
└── testdir
└── baz.c
5 directories, 4 files
$ find -path "*/test" -type d -delete
$ tree
.
├── mytest
│ └── test
├── test
└── testdir
└── baz.c
4 directories, 1 file
$ find -name "test" -type d -delete
$ tree
.
├── mytest
└── testdir
└── baz.c
2 directories, 1 file
+です。ずっと前に知っていたらよかったのにと思いました。