如何编写命令来搜索和删除文件,即使在找不到文件的情况下也是如此?
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
我正在使用亚马逊 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