Как удалить файл, только если он существует?
У меня есть сценарий оболочки, и я хочу добавить строку или две, где он удалит файл журнала, только если он существует. В настоящее время мой скрипт просто делает:
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
Менее эффективен, но легко запоминается.