如果文件存在,我该如何删除?

use*_*922 16 shell

我有一个shell脚本,我想添加一行或两行,只有存在时才会删除日志文件.目前我的脚本只是:

rm filename.log
Run Code Online (Sandbox Code Playgroud)

但是,如果文件名不存在,我会收到一条消息,说明filename.log不存在,无法删除.这是有道理的,但我不想在每次运行脚本时都看到这一点.有一个更聪明的IF语句方法我可以完成这个吗?

Cha*_*ffy 36

-f参数传递给rm,这将导致它将命名文件不存在的情况视为成功,并将在这种情况下禁止任何错误消息:

rm -f -- filename.log
Run Code Online (Sandbox Code Playgroud)

真正要求的更像是:

[ -e filename.log ] && rm -- filename.log
Run Code Online (Sandbox Code Playgroud)

但更多的是输入并添加额外的故障模式.(如果在[测试之后删除了其他内容但在rm删除之前,那么您又会重新出现故障).

--顺便说一句,s会导致文件名被视为文字,即使它以前导破折号开头; 如果你的名字来自变量或者没有严格控制,你应该习惯性地使用这些.


mah*_*off 8

首先触摸该文件,如果该文件不存在,则会创建该文件,但如果存在,则仅更改时间戳。

touch filename && rm filename
Run Code Online (Sandbox Code Playgroud)

效率较低,但易于记忆。


Raj*_*edi 5

if [ ! -f 'absolute path of file' ]
then
  echo "File does not exist. Skipping..."
else
  rm 'absolute path of file'
fi
Run Code Online (Sandbox Code Playgroud)

如果您使用以下内容,那么它应该可以工作。