删除包含特定文件的目录

删除包含特定文件的目录

我想找到包含某个文件的所有目录,然后删除这些目录。和

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就可以得到目录的路径。启动 shell 以便能够在路径上使用字符串操作。

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

如果有人发现这有问题,我想知道。

相关内容