Как удалить файл, только если он существует?

У меня есть сценарий оболочки, и я хочу добавить строку или две, где он удалит файл журнала, только если он существует. В настоящее время мой скрипт просто делает:

rm filename.log

Однако, если имя файла не существует, я получаю сообщение о том, что filename.log не существует, его нельзя удалить. Это имеет смысл, но я не хочу видеть, что каждый раз, когда я запускаю скрипт. Есть ли более разумный способ с утверждением IF, я могу это сделать?

Ответ 1

Передайте аргумент -f в rm, что приведет к тому, что он рассмотрит ситуацию, когда именованный файл не существует как успешный, и в этом случае -f любое сообщение об ошибке:

rm -f -- filename.log

То, что вы буквально просили, было бы больше похоже:

[ -e filename.log ] && rm -- filename.log

но это больше, чтобы вводить и добавлять дополнительные режимы отказа. (Если что-то еще удалило файл после того, как [ проверит его, но до того, как rm удалит его, вы снова получите отказ).

В стороне, -- заставляет имя файла рассматриваться как буквальное, даже если оно начинается с ведущей тире; вы должны использовать их обычно, если ваши имена поступают из переменных или иначе строго не контролируются.

Ответ 2

if [ ! -f 'absolute path of file' ]
then
  echo "File does not exist. Skipping..."
else
  rm 'absolute path of file'
fi

Если вы используете следующее, то это должно сработать.

Ответ 3

Сначала коснитесь файла, который создаст его, если он не присутствует, но только измените метку времени, если она присутствует.

touch filename && rm filename

Менее эффективен, но легко запоминается.