指定:
EmptyMe
が異なるレベルにあるツリー構造を持っていますEmptyMe
ディレクトリにはサブディレクトリとファイルが含まれます必須:
EmptyMe
ディレクトリの空の内容(inlcudingのサブディレクトリ)、これらのディレクトリは保持します(削除しません)。質問:
現在のレベルからすべてのEmptyMe
ディレクトリを再帰的に検索し、ディスク上のEmptyMe
ディレクトリを保持したまま、そのすべてのコンテンツ(サブディレクトリを含む)を削除するUnixコマンドとは何ですか?
私の試み:
$ find . -name 'EmptyMe' -type d -exec rm -- {} +
rm: cannot remove `./a/b/c/d/EmptyMe': Is a directory
ご覧のように、そのコマンドはその内容ではなく、EmptyMe
を削除しようとしました。
ありがとう!
テスト走行:
find . -path '*/EmptyMe/*'
実際の削除:
find . -path '*/EmptyMe/*' -delete
-path '*/EmptyMe/*'
は、EmptyMe
というディレクトリにあるすべてのアイテムに一致を意味します。
使用できる1つのオプションは、コマンドをネストすることです。
find . -type d -name 'EmptyMe' -exec find {} -mindepth 1 -delete \;
外側のfind -type d -name 'EmptyMe'
は必要なディレクトリを見つけ、-exec ... \;
を介して内側のfind
コマンドを実行します。内部コマンドは、見つかったディレクトリ({}
を介して参照)に降ります。ここでは-delete
フラグを使用しているため、深さ優先検索を実行し、ファイルを削除してからサブディレクトリを削除します。
これは機能しますが、EmptyMe
ディレクトリが空の場合はエラーになります。
find . -name 'EmptyMe' -type d -exec sh -c 'rm -r -- "$1"/*' sh {} \;
エラーの例:
rm: cannot remove ‘./EmptyMe/*’: No such file or directory