特定のファイルを含むすべてのディレクトリを見つけて、そのディレクトリを削除したいと思います。そして
find . -name thatcertainfile -execdir pwd \;
削除するすべてのディレクトリのリストを取得しました。しかし、すぐにすべてのディレクトリを削除するにはどうすればよいですか?ファイル自体だけでなく、ディレクトリ全体を削除したいと思います。
find . -name thatcertainfile -exec rm -r {} \;
答え1
次のコマンドを試してください。
rm -rf $(find . -name thatcertainfile -execdir pwd \;)
rm -rf
削除する内容がコマンドの出力であることを知らせる必要があります。たとえば、コマンドの出力が/home/guest/Documents
私が示したのと同じ場合rm -rf /home/guest/Documents
。
答え2
ファイルパスが与えられたら、./some/where/thatcertainfile
最後のファイルを削除して/thatcertainfile
ディレクトリパスを取得します。パスで文字列操作を使用できるようにシェルを起動します。
find . -name thatcertainfile -exec sh -c 'rm -r "${0%/*}"' {} \;
またはzshを使用してください。パスを含むディレクトリの名前に変換するには、次のようにします。:h
履歴修飾子経由グローバル予選。
rm -rf **/thatcertainfile(N:h)
(もちろん実行する前にテストしてみてくださいrm
!)
答え3
パイプラインは操作を実行できる必要があり、名前にスペースが含まれているディレクトリの影響を受けてはいけません。
find . -name thatcertainfile -print0 | xargs --null dirname -z | xargs --null rm -r
誰でもこれに問題があると思われる場合は知りたいです。