如果文件不存在,如何让 rm 不给出错误?

如果文件不存在,如何让 rm 不给出错误?

我正在编写一个 makefile,它将在编译结束时清理一些无用的文件。如果已经创建了目标,它当然会跳过该目标,无用的文件可能不存在。因此,如果我这样做:

rm lexer.ml interpparse.ml interpparse.mli

我可能会因为其中一个文件不存在而收到错误。有什么方法rm可以忽略这些文件吗?

在阅读手册页时,我看到以下选项:

 -f          Attempt to remove the files without prompting for confirma-
             tion, regardless of the file's permissions.  If the file does
             not exist, do not display a diagnostic message or modify the
             exit status to reflect an error.  The -f option overrides any
             previous -i options.

听起来像几乎我想要的,但我不太清楚权限部分。有办法吗?

答案1

这个-f选项肯定是您想要使用的。

它所指的关于文件权限的确认是这样的:

$ touch myfile    
$ chmod 400 myfile
$ rm myfile       
rm: remove write-protected regular empty file `myfile'?

因此rm,如果您尝试删除您没有写入权限的文件,系统会发出警告。如果您对目录有写入权限,则允许这样做,但这有点奇怪,这就是为什么rm通常会发出警告的原因。

答案2

另一个解决方案是这样的:https://stackoverflow.com/questions/11231937/bash-ignoring-error-for-a-particular-command

只需在命令后添加一个 OR 语句:

rm -rf my/dir || true

这样,当语句 #1 失败(抛出错误)时,运行语句 #2,它很简单true

答案3

我来晚了,但我一直都在用这个。在 makefile 中,-在行首添加以忽略该行的返回值。如下所示:

-rm lexer.ml interpparse.ml interpparse.mli

答案4

如果你找到办法全局文件名,rm如果找不到匹配项,则不会发出抱怨。因此,诸如 等之类lexer.m* interpparse.*的操作应该对您有用(当然,要小心不要删除太多)。此外,-f这是一种非常合理的方法,只要您不希望文件权限可以防止您删除不想要的文件 - 如果您不想删除它,请不要将其放入列表中。

相关内容