194

Linuxで、フォルダー階層の奥深くにネストされている特定の名前のフォルダーを削除するにはどうすればよいですか?

次のパスはフォルダの下にあり、。という名前のすべてのフォルダを削除したいと思いますa

1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b

親フォルダーからどのLinuxコマンドを使用する必要がありますか?

4

12 に答える 12

219

ターゲットディレクトリが空の場合は、検索を使用し、ディレクトリのみでフィルタリングし、名前でフィルタリングし、rmdirを実行します。

find . -type d -name a -exec rmdir {} \;

その内容を再帰的に削除したい場合は、またはに置き換えて-exec rmdir {} \;ください。他の回答には、これらのバージョンの詳細が含まれています。-delete-prune -exec rm -rf {} \;

于 2012-10-23T14:29:25.433 に答える
207

次のように、名前「a」にfindを使用し、rmを実行して、希望に応じて名前が付けられたものを削除します。

find . -name a -exec rm -rf {} \;

最初にlsを使用してテストしてリストします。

find . -name a -exec ls {} \;

これにより、プレーンファイルではなくディレクトリのみが削除されるようにするには、「-typed」引数を使用します(コメントで提案されているように)。

find . -name a -type d -exec rm -rf {} \;

「{}」は、見つかった各ファイル「a」の置換です。execコマンドは、置換によってそれぞれに対して実行されます。

于 2012-10-23T14:28:31.400 に答える
79

これも機能します。「a」と呼ばれるすべてのフォルダとその内容が削除されます。

rm -rf `find . -type d -name a`
于 2014-10-16T16:54:58.307 に答える
50

node_modulesを使用して進行中の作業のバックアップを実行する前に、ここでフォルダを削除しようとしましたrsync。重要な要件は、node_modulesフォルダーをネストできることです。そのため、-pruneオプションが必要です。

まず、これを実行して、削除するフォルダーを視覚的に確認しました。

find . -type d -name node_modules -prune

次に、これを実行してすべてを削除しました。

find . -type d -name node_modules -prune -exec rm -rf {} \;

ピスタッシュのおかげで

于 2018-10-03T16:08:19.383 に答える
36

、という名前のすべてのディレクトリを削除するには、次のコマンドをfoo実行します。

find -type d -name foo -a -prune -exec rm -rf {} \;

他の答えは重要なことを欠いています:-pruneオプション。がない-prune場合、GNU findは一致する名前のディレクトリを削除し、それを繰り返して一致するディレクトリをさらに検索しようとします。この-pruneオプションは、条件に一致するディレクトリに再帰しないように指示します。

于 2016-12-03T08:01:43.143 に答える
19

このコマンドは私のために働きます。それは再帰的にその仕事をします

find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

。-現在のフォルダ

"node_modules"-フォルダ名

于 2019-10-30T17:32:56.320 に答える
14
find ./ -name "FOLDERNAME" | xargs rm -Rf

トリックを行う必要があります。警告、誤って.または/xargs rm -Rfコンピュータ全体に送り込んだ場合、それを元に戻すオプションなしで削除され、OSの再インストールが必要になります。

于 2012-10-23T14:35:13.157 に答える
14

複数の回答を組み合わせて、LinuxとMacOSの両方で機能するコマンドを次に示します。

rm -rf $(find . -type d -name __pycache__)
于 2019-08-20T15:40:55.553 に答える
12

私は100以上のファイルを持っていました

log-12
log-123
log-34
....

上記の答えは私にはうまくいきませんでした

しかし、次のコマンドは私を助けました。

find . -name "log-*" -exec rm  -rf {} \;

私はそれがで始まるファイルとフォルダの両方を削除するように与え-typeました.log-

ファイルがあっても、フォルダを再帰的にrm -rf削除します。

フォルダだけが必要な場合

find -type d -name "log-*" -exec rm  -rf {} \;

ファイルのみ

find -type f -name "log-*" -exec rm  -rf {} \;
于 2016-06-09T13:30:20.550 に答える
7

もう1つ:

"-exec rm -rf {} \;" can be replaced by "-delete"

find -type d -name __pycache__ -delete      # GNU find
find . -type d -name __pycache__ -delete    # POSIX find (e.g. Mac OS X)
于 2017-05-12T12:03:56.510 に答える
0

構造内のいくつかのフォルダー内のフォルダー名内の式を探していたため、以前のコメントは機能しませんでした

以下は、次のような構造のフォルダーに対して機能します。

b / d / ab / cd/fileまたはc/d / e / f / a / f / file

rm-rfを使用する前に確認するには

find . -name *a* -type d -exec realpath {} \;

コンテンツを含むフォルダーを再帰的に削除する

find . -name *a* -type d -exec rm  -rf {} \;
于 2022-03-01T03:41:31.070 に答える
-2

path / to / the/foldersを検索します-maxdepth1-name "my_ *" -type d -delete

于 2017-11-06T12:25:33.643 に答える