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コマンドを使用する必要がありますか?
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コマンドを使用する必要がありますか?
回答:
ターゲットディレクトリが空の場合は、検索を使用し、ディレクトリのみでフィルタリングし、名前でフィルタリングし、rmdirを実行します。
find . -type d -name a -exec rmdir {} \;
内容を再帰的に削除する場合は-exec rmdir {} \;
、-delete
またはに置き換え-prune -exec rm -rf {} \;
ます。他の回答には、これらのバージョンに関する詳細が含まれています。
{} \;
か?
{}
「一致するファイル/フォルダごと」として読み取ることができます。つまり、「見つかった」ファイル/フォルダごとに置き換えられます。句の\;
ターミネータです-exec
。
-prune
@David Graysonの提案に従って、回答にフラグを追加することを検討してください。これfind
がなくても、今はなくなったフォルダーにアクセスしようとし、最終的にエラーコードで終了します。これにより、Dockerビルドが失敗する可能性があります。
次のように、名前「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コマンドは、置換によってそれぞれに対して実行されます。
1/2/a/3/4
、これは意図していない可能性のあるのようなものをキャッチすることにも注意してください。推奨を最初にテストするには+1してください
echo {}
代わりに最初にテストするためにrecols {}
node_modules/
。
find . -name a -type d -exec rm -rf {} \;
、それは機能しましたが、find: ‘./subdir/subdir/a’: No such file or directory
削除されたディレクトリごとに出力されました。
これも機能します-「a」と呼ばれるすべてのフォルダとその内容が削除されます。
rm -rf `find -type d -name a`
find/rm
。
find . -name a -exec rm -rf {} \;
を使用すると、ディレクトリに移動してさらにアイテムを検索しようとするとfindがクラッシュし、のようなエラーが発生しますfind: '1/2/3/a': No such file or directory
。
illegal option --t
。私はまた、(で検索するディレクトリをパスしなければならなかったstackoverflow.com/questions/25840713/...): rm -rf `find . -type d -name a`
。
という名前のすべてのディレクトリを削除するには、次のコマンドをfoo
実行します。
find -type d -name foo -a -prune -exec rm -rf {} \;
他の答えは重要なことを見逃している:-prune
オプション。なし-prune
場合、GNU findは一致する名前のディレクトリを削除してから、そのディレクトリに再帰して、一致するディレクトリをさらに検索します。この-prune
オプションは、条件に一致したディレクトリに再帰しないように指示します。
私はここnode_modules
で、を使用して進行中の作業のバックアップを行う前に、自分のフォルダを削除しようとしていましたrsync
。重要な要件は、node_modules
フォルダーをネストできることです-prune
。そのため、オプションが必要です。
まず、これを実行して、削除するフォルダーを視覚的に確認しました。
find -type d -name node_modules -prune
次に、これを実行してそれらをすべて削除しました。
find -type d -name node_modules -prune -exec rm -rf {} \;
ピスタチェのおかげで
sh #!/bin/bash echo "Found node_modules: "; find -type d -name node_modules -prune; read -r -p "Do you really want to delete all directories? [yes/no] " input; if [ ! $input != "yes" ]; then find -type d -name node_modules -prune -exec rm -rf {} \;; fi
find ./ -name "FOLDERNAME" | xargs rm -Rf
トリックを行う必要があります。あなたが誤ってポンプ場合は警告、.
または/
にxargs rm -Rf
あなたの全体のコンピュータのOSの再インストールを必要とし、それを取り戻すためのオプションなしに削除されます。
のような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 {} \;