优化列出和删除文件的方式

优化列出和删除文件的方式

我需要列出并删除 .php、.xml 文件。为此,我使用find命令。

列出: find . -type f -name \*.php -print0

删除 : find . -type f -name \*.php -print0 | xargs -0 rm -r

当我跑find两次时。是否可以存储第一个命令的结果,然后在第二个命令中重用?

谢谢。

答案1

find . -type f -name '*.php' -print0 | tee list | tr \\0 \\n
xargs -r0 rm -f < list

假设您想在决定删除它们之前查看该列表。如果没有,您可以简单地执行以下操作:

find . -name '*.php' -type f -print -delete

(请注意-print0, 、-delete-r-0不是标准的,但受 GNU 实现支持)

另请注意,虽然相对安全,但在第一个解决方案中,有人可能会在您运行and命令find -delete之间将目录重命名为某些敏感区域的符号链接,并让您删除您不打算删除的文件。运行两次,第二次可以避免这种情况。findxargsfind-delete

答案2

由于您需要.php.xml文件,因此find命令应如下所示:

find . \( -name '*.php' -o -name '*.xml' \) -type f -print -exec rm {} +

每个文件块仅使用一次+的指令。如果我们使用了,我们将为每个文件运行一个命令。findrm\;rm

相关内容