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