Я работаю над некоторыми материалами, где храню данные в файле. Но каждый раз, когда я запускаю script, он добавляется к предыдущему файлу.
Мне нужна помощь в том, как я могу удалить файл, если он уже существует.
Я работаю над некоторыми материалами, где храню данные в файле. Но каждый раз, когда я запускаю script, он добавляется к предыдущему файлу.
Мне нужна помощь в том, как я могу удалить файл, если он уже существует.
Не пытайтесь проверить, существует ли файл, просто попробуйте удалить его.
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. перед выполнением следующей команды, которая ожидает, что она не существует. Попытка это классическое состояние гонки. Не делай этого.
Еще одна строка, которую я использовал, это:
[ -e file ] && rm file
Вы можете использовать это:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
Если вы хотите проигнорировать шаг, чтобы проверить, существует ли файл или нет, вы можете использовать довольно легкую команду, которая будет удалять файл, если существует, и не выдает ошибку, если она не существует.
rm -f xyz.csv
Что-то вроде этого будет работать
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f проверяет, является ли он обычным файлом
-e проверяет, существует ли файл
Введение в для получения дополнительной информации
EDIT: -e, используемый с -f, является избыточным, fo использование -f тоже должно работать тоже
Сценарий оболочки с одним вкладышем для удаления файла, если он уже существует (на основе ответа Jindra Helcl):
[ -f file ] && rm file
или с переменной:
#!/bin/bash
file="/path/to/file.ext"
[ -f $file ] && rm $file
if [ $( ls <file> ) ]; then rm <file>; fi
Кроме того, если вы перенаправляете свой вывод с помощью >
вместо >>
, он перезапишет предыдущий файл