我正在编写一个 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
这是一种非常合理的方法,只要您不希望文件权限可以防止您删除不想要的文件 - 如果您不想删除它,请不要将其放入列表中。