web-dev-qa-db-ja.com

特定の名前のフォルダーを削除する方法

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コマンドを使用する必要がありますか?

109
Joe

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

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

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

120
pistache

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

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

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

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

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

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

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

135
wmorrison365

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

rm -rf `find -type d -name a`
48
Arash Fotouhi

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

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

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

21
David Grayson

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

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

find -type d -name node_modules -Prune

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

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

ピスタッシュのおかげで

12
ewok2030
find ./ -name "FOLDERNAME" | xargs rm -Rf

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

11
Slevin

私のような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 {} \;
9
Thamaraiselvam

もう一つ:

"-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)
7
dgrigonis

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

rm -rf $(find . -type d -name __pycache__)
1
marcosfede