回答:
find ツリー全体でアクションを選択的に実行するのに非常に便利です。
find . -type f -name ".Apple*" -delete
ここでは-type f、ディレクトリではなくファイルであることを確認します。また、シンボリックリンク、ソケットなどをスキップするため、正確に望んでいるとは限りません。を使用できます! -type d。これは、文字通りディレクトリではないことを意味しますが、文字を削除してデバイスをブロックすることもできます。-typeのmanページで述語を見ることをお勧めしますfind。
厳密にワイルドカードを使用してこれを行うには、高度なシェルサポートが必要です。Bash v4にはglobstarオプションがあり、これを使用してサブディレクトリを再帰的に一致させることができます**。zshまた、kshこのパターンをサポートします。それを使用すると、できますrm -rf **/.Apple*。これはPOSIX標準ではなく、移植性もあまり高くないため、スクリプトで使用することは避けますが、1回限りの対話型シェルアクションの場合は問題ありません。
-deletePOSIXでもありません。90年代初期**に導入されzshました。現在は(出現順で)ksh93、fish、bash、tcshでもあります。
rm -rf **/.Apple*
-deleteしない場合は-exec rm -f {} +代わりに使用します。
find、それが削除されますように冗長であることを?「globstar」メソッドは-vスイッチを追加することでこれを行うと思います。
そのmanページで述べられているように、意図的な振る舞い(つまり、パスが./で始まる場合は削除を拒否しますが、私の場合はそうします)により、findwithの使用に問題が発生しました。-deletefind
-delete見つかったファイルやディレクトリを削除します。常にtrueを返します。これは、ツリーを再帰的に検索するときに現在の作業ディレクトリから実行されます。「。」を基準としたパス名に「/」文字が含まれるファイル名は削除されません。セキュリティ上の理由から。
このオプションにより、深さ優先のトラバーサル処理が暗示されます。
次のシンボリックリンクはこのオプションと互換性がありません。
代わりに、私はちょうどできました
find . -type d -name 'received_*_output' -exec rm -r {} +
あなたの場合、グロブ(アスタリスク、*)を引用することが解決策のようですが、他の誰かが同様の問題を抱えている場合に備えて、答えを提供したかったのです。
注:以前、私の答えは次のようにすることでしたが、@ Wildcardはコメントでそれを行う際のセキュリティ上の欠陥を指摘しました。
find . -type d -name 'received_*_output' | xargs rm -r
xargsここで使用する正当な理由はありません。 -exec rm -r {} \;または、より良い-exec rm -r {} +ことに、特殊文字のファイル名で失敗することなく同様に行います。参照してくださいなぜ検索の出力悪い練習をループされますか?
mkdir -p $'blah\nDocuments\n/etc\n/home\n/received__output'データ損失の可能性があると思わない場合は、ディレクトリで試してから同じコマンドを再度実行してください。または、質問以来、マックOSについてですmkdir -p $'blah\nDocuments\n/Users\n/Applications\n/received__output'。(警告:これを行うと、すべてのファイルが削除されます。それは私のポイントです。)
試してください:
shopt -s dotglob # using Bash
printf '%s\n' ./.Apple* # test
#rm -rf ./.Apple*
find . -type d -name .Apple*仕事に取り掛かることができます-すべてのフォルダーをリストします。ただし、-delete最後に追加すると失敗します。使用方法の概要が表示されます。BusyBox v1.1.1で実行されています。それは違いがありますか?