Shell script, чтобы удалить файл, если он уже существует

Я работаю над некоторыми материалами, где храню данные в файле. Но каждый раз, когда я запускаю script, он добавляется к предыдущему файлу.

Мне нужна помощь в том, как я могу удалить файл, если он уже существует.

Ответ 1

Не пытайтесь проверить, существует ли файл, просто попробуйте удалить его.

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. перед выполнением следующей команды, которая ожидает, что она не существует. Попытка это классическое состояние гонки. Не делай этого.

Ответ 2

Еще одна строка, которую я использовал, это:

[ -e file ] && rm file

Ответ 3

Вы можете использовать это:

#!/bin/bash

file="file_you_want_to_delete"

if [ -f $file ] ; then
    rm $file
fi

Ответ 4

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

 rm -f xyz.csv

Ответ 5

Что-то вроде этого будет работать

#!/bin/sh

if [ -fe FILE ]
then 
    rm FILE
fi 

-f проверяет, является ли он обычным файлом

-e проверяет, существует ли файл

Введение в для получения дополнительной информации

EDIT: -e, используемый с -f, является избыточным, fo использование -f тоже должно работать тоже

Ответ 6

Сценарий оболочки с одним вкладышем для удаления файла, если он уже существует (на основе ответа Jindra Helcl):

[ -f file ] && rm file

или с переменной:

#!/bin/bash

file="/path/to/file.ext"
[ -f $file ] && rm $file

Ответ 7

if [ $( ls <file> ) ]; then rm <file>; fi

Кроме того, если вы перенаправляете свой вывод с помощью > вместо >>, он перезапишет предыдущий файл