【问题标题】: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

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

【问题讨论】:

    标签: linux bash find amazon rm


    【解决方案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.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2018-10-02
      • 2021-05-29
      相关资源
      最近更新 更多