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

Posted

技术标签:

【中文标题】即使在找不到文件的情况下,如何编写命令来搜索和删除文件?【英文标题】:How do I write a command to search and remove files, even in cases where the files can't be found? 【发布时间】:2016-08-19 02:34:46 【问题描述】:

我正在使用带有 bash shell 的 Amazon Linux。我想在一行中查找并删除一些 PDF 文件,所以我尝试了

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

如果有 PDF 文件,这可以正常工作。但是如果没有,我会得到错误

rm: missing operand

有没有什么办法可以将上面的语句写在一行中,这样即使没有要删除的文件也不会失败?

【问题讨论】:

【参考方案1】:

这可以通过使用 xargs 的 -r 标志轻松实现。 我还建议使用“特殊字符容忍”版本:

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

谨慎的做法是使用 -i 作为 rm,-f 似乎有点危险。 @t0mm13b:这将取决于应用程序。我假设由于 OP 抱怨错误,它们是从脚本中运行的,在这种情况下,可能无法通过-i 以交互方式检查删除。由于他们对目录和文件 glob 进行了硬编码,我认为在这里使用 -f 是相当安全的,但在更一般的搜索中,我同意这可能是危险的。【参考方案3】:

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

           rm -f path/*.pdf

【讨论】:

pdf 文件分散在不同的目录中,否则这就是答案。 @Dave 没关系,由你来选择正确的答案。但是,您可以像rm 参数一样指定多个路径。 rm path1/*.pdf path2/*.pdf.

以上是关于即使在找不到文件的情况下,如何编写命令来搜索和删除文件?的主要内容,如果未能解决你的问题,请参考以下文章

linux下如何删除一个文件?

如何使用FORFILES命令来删除SQL Server备份

linux root目录可以清空吗

如何在不删除的情况下暂停 azure webjob?

linux下搜索命令

如何在不使用 Set 的情况下有效地从数组中删除重复项