Answers:
使用该-f
选项。它将无提示地忽略不存在的文件。
来自man rm
:
-f, --force
ignore nonexistent files and arguments, never prompt
[“从不提示”部分表示(a)-f
覆盖了先前指定的任何内容-i
或-I
选项,并且(b)写保护的文件将被删除而无需询问。]
如果没有-f
,rm
则会抱怨文件丢失:
$ rm nonesuch
rm: cannot remove ‘nonesuch’: No such file or directory
使用-f
,它将保持沉默:
$ rm -f nonesuch
$
如果你的要求是rm
不抱怨缺少的文件,但你也想任何其他的输出rm
,我的建议是先行先试目标文件的存在,只有调用rm
(没有的-f
标志),如果该文件确实存在。
# rest of script
# ...
[ -e "$file" ] && rm "$file"
# ...
# rest of script
rm -f
例如,调用没有用户写权限的文件,将会删除该文件并也不会发出该情况下的正常提示。
如果您想对多个文件使用相同的想法,我将创建一个函数定义,例如:
qrm() {
for f
do
[ -e "$f" ] && rm "$f"
done
}
像这样使用它: qrm file1 file2-does-not-exist *.txt etc here
您说过,您仍然希望rm
在运行命令时看到命令的其他输出,但是使用该-f
选项将禁止这些输出。考虑到要显示的所有其他内容,您将需要过滤STDERR以获取所需内容,这有点棘手。
您将要使用如下命令:
rm -f filename 3>&1 1>&2 2>&3 3>&- | grep -v 'No such file or directory'
命令说明:
-f
参数是强制通过而不提示确认或错误3>&1 1>&2 2>&3 3>&-
是在STDOUT和STDERR之间切换以进行过滤(您可以在此处了解更多信息)如果需要,| grep -v 'No such file or directory'
正在过滤掉您不想看到的消息现在,如果您只想完全消除错误消息,则可以运行以下命令:
rm filename 2> /dev/null
此命令将STDERR重定向到/ dev / null,因此在运行命令时将看不到它。
rm
没有-v
永远输出到标准输出,标准错误只,所以在这种情况下,你可以只是2>&1 | grep
没有舞蹈这是有用的更普遍,
或者,您可以将find
命令与-delete
选项一起使用。(显然)这只会删除找到的文件,因此即使没有找到,也不会发出警告。一个示例可能是:
find /var/log/triffids/ -name "*.log" -mtime 30 -delete
将会搜索/var/log/triffids/
目录并删除.log
后缀超过30天的所有文件。
最好先运行这些命令而不使用该-delete
选项,以确保找到所需的文件。
您可以-f
根据手册页使用它:
无论文件的权限如何,都尝试删除文件而不提示您进行确认。如果该文件不存在,则不显示诊断消息或修改退出状态以反映错误。还请记住,-f选项将覆盖以前的任何-i选项。
rm -f xyz-directory
不会提示您任何事情,并且会完全按照您的意愿进行。
主要有两种方法:如果添加-f选项,它将不会显示“不存在”错误;另外两种是:(适用于几乎所有命令)而不是仅执行“ thecommand”,而是执行“ thecommand 2> / dev” / null”,其中“ thecommand”是您正在执行的命令。