Ответы:
Не пытайтесь проверить, существует ли файл, просто попробуйте удалить его.
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
Обратите внимание, что вторая команда потерпит неудачу (вернет ненулевой статус завершения), если файл не существует, но первая будет выполнена успешно благодаря опции -f
(сокращение --force
). В зависимости от ситуации это может быть важной деталью.
Но, скорее всего, если вы добавляете файл, это потому, что ваш скрипт использует >>
что-то для перенаправления в файл. Просто замените >>
на >
. Трудно сказать, так как вы не предоставили код.
Обратите внимание, что вы можете сделать что-то подобное test -f /p/a/t/h && rm /p/a/t/h
, но делать это совершенно бессмысленно. Вполне возможно, что тест вернет true, но / p / a / t / h не будет существовать до того, как вы попытаетесь удалить его, или, что еще хуже, тест не пройдёт и будет создан / p / a / t / h. перед выполнением следующей команды, которая ожидает, что она не существует. Попытка это классическое состояние гонки. Не делай этого.
rm /p/a/t/h 2> /dev/null
не будет сохранять код возврата ( echo $?
) как 0, если файл не существует. Это может привести к сбою заданий в Jenkins только потому, что мы попытались удалить несуществующий файл.
noclobber
в bash) или, возможно, изменить существующий файл, чтобы выполнить перенаправление, если файл существует (не избегает условия гонки), но все, что нужно сделать, это сделать ошибки более тонкими.
Еще одна однострочная команда, которую я использовал:
[ -e file ] && rm file
Вы можете использовать это:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
echo $?
не дает 1, если файл не существует.
Если вы хотите игнорировать шаг, чтобы проверить, существует ли файл или нет, то вы можете использовать довольно простую команду, которая удалит файл, если он существует, и не выдаст ошибку, если он не существует.
rm -f xyz.csv
-f
он не выдаст ошибку. Этот ответ помог мне, спасибо.
Примерно так будет работать
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f проверяет, является ли это обычный файл
-e проверяет, существует ли файл
Введение в если для получения дополнительной информации
РЕДАКТИРОВАТЬ: -e используется с -f излишним, fo использование только -f тоже должно работать
-a
устарела, используйте -e
вместо.
-f
.
-e
in -fe
является избыточным, так как -f
также проверяет наличие файла, насколько я знаю ..
if [ $( ls <file> ) ]; then rm <file>; fi
Кроме того, если вы перенаправите вывод с помощью >
вместо >>
него, будет перезаписан предыдущий файл
file
что-то вроде5 -lt 2
rm $my_file
, верно? Какую оболочку вы используете?