如何编写命令来搜索和删除文件,即使在找不到文件的情况下也是如此?

How do I write a command to search and remove files, even in cases where the files can't be found?

我正在使用亚马逊 Linux 和 bash shell。我想在一行中查找和删除一些 PDF 文件,所以我尝试了

find /home/jboss/.jenkins/jobs/myco/workspace/ebook/ -name '*.pdf' | xargs rm

如果有 PDF 文件,此方法工作正常。但是如果有none,我得到错误

rm: missing operand

有没有办法把上面的语句写在一行中,即使没有要删除的文件也不会失败?

您是否尝试过在 find 命令中完成所有操作?

find /home/jboss/.jenkins/jobs/myco/workspace/ebook/ -name '*.pdf' -exec rm -f {} \;

我一直使用上面的构造,但我相信您也可以使用开关 -delete,这可能会更有效一些。如果您确实使用它,请记住将 -delete 放在末尾,因为 find 作为表达式从左到右求值。

这可以使用 xargs 的 -r 标志轻松实现。 我还建议使用 "special character tolerant" 版本:

find /home/jboss/.jenkins/jobs/myco/workspace/ebook/ -name '*.pdf' -print0 | xargs -0 -r rm

你甚至不需要find,你可以简单地使用rm,它支持基本的模式匹配。只需执行以下操作:

           rm -f path/*.pdf