你好,我有很多名为“@eaDir”的文件夹分布在我的一个磁盘上,我想搜索并删除它们及其内容。
我知道这可能需要结合使用find和rm命令,但我不太确定如何操作。有人能帮忙吗?
试试这个:
find . -type d -name '@eaDir' -print0 | xargs -rt0 rm -rv
以下是使用xargs
的显式长选项的相同内容:
find . -type d -name '@eaDir' -print0 | xargs --no-run-if-empty --verbose --null rm -rv
如果你要编写需要维护/审核的脚本,使用长选项是个好主意。
但在此之前:
man find
man xargs
find /path/to/the/disk -type d -name "@eaDir" -delete
请注意,这里的顺序是基本的:引用手册页,
警告:不要忘记find命令行被评估为一个表达式,因此将-delete放在第一位会使find尝试删除您指定的起始点以下的所有内容。
所以,像往常一样,首先使用-print
测试您的find
命令,然后在检查一切正常后,将其替换为-delete
。请注意,-delete
意味着-depth
,因此,为了进行有意义的-print
测试,您应该在表达式中明确指定它:
当测试一个find命令行,您之后打算使用-delete时,应该明确指定-depth,以避免后来的惊喜。
-delete
。如果放错位置或顺序,它有可能引发灾难。 - dschulzecho
)进行测试,然后再将“-delete”(rm
)放到其位置。 - Matteo Italia前往根目录或文件夹并执行以下命令:
find . -path '*/@eaDir/*' -delete -print && find . -path '*/@eaDir' -delete -print
这应该对你有用。
find . -type d -name '@eaDir' -exec rm -rv {} \;
是可以的,不是吗? - jfg956-exec
选项时,find
将为找到的每个目录生成一个rm
进程。使用xargs
,将构建rm -rv
的参数列表,然后一次性调用rm -rv [argument list here]
。 - dschulz