在 Mac OS X 中删除包含指定文件的目录

在 Mac OS X 中删除包含指定文件的目录

如何删除包含特定名称的文件或文件夹的文件夹?

例如我想删除所有包含文件“things.txt”的文件夹:

/dirA/
/dirB/things.txt
/dirC/
/dirD/things.txt
/dirE/things.txt
/dirF/

然后它将删除dirB、、dirDdirE——而不仅仅是里面的文件。

答案1

一种无需管道传输的解决方案是将目录名称传递给findshell exec

这不会那么有效,而且如果目录已经被删除,它当然会尝试删除不存在的目录。

find . -depth -type f -name 'things.txt' -exec sh -c 'rm -rf "$(dirname $0)"' {} \;

如果您想使用xargs,您可以像这样非常简单地进行操作。请注意,dirname只接受一个参数,因此您必须指定只-n 1传递xargs一个参数:

find . -depth -type f -name 'things.txt' | xargs -n 1 dirname | uniq | xargs rm -rf

如果您的目录名包含换行符,这将不安全,因此请注意这一点。

答案2

这已经在 Linux 上测试过,因为下面的命令也可以在 Unix 系统上执行。

find -type f -name 'things.txt' | xargs dirname | xargs rm -r

解释:

find -type f -name 'things.txt' --> 搜索名为“things.txt”的文件(仅文件,而不是目录)

|--> 将结果传送到下一个命令

xargs dirname| --> 获取文件所在的目录名然后将结果传送到下一个命令

xargs rm -r --> 继续删除所有包含名为“things.txt”的文件的目录

瞧!

相关内容