回答:
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
+
です。ずっと前に知っていたらよかったのにと思いました。