Відповіді:
Не турбуйтеся перевіряти, чи існує файл, просто спробуйте видалити його.
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
Зверніть увагу, що друга команда не вдасться (поверне ненульовий статус виходу), якщо файл не існував, але перша вдасться завдяки опції -f(short for --force). Залежно від ситуації це може бути важливою деталлю.
Але ймовірніше, якщо ви додаєте файл, це тому, що ваш скрипт використовується >>для перенаправлення чогось у файл. Просто замініть >>на >. Важко сказати, оскільки ви не надали код.
Зауважте, що ви можете робити щось подібне test -f /p/a/t/h && rm /p/a/t/h, але робити це абсолютно безглуздо. Цілком можливо, що тест повернеться істинним, але / p / a / t / h не буде існувати до того, як ви його спробуєте видалити, або ще гірше тест не вдасться і буде створено / p / a / t / h перед тим, як виконати наступну команду, яка передбачає, що вона не існує. Спроба цього - класична умова гонки. Не робіть цього.
rm /p/a/t/h 2> /dev/nullне збереже код повернення ( echo $?) як 0, якщо файл не існував. Це призвело б до того, що роботу Дженкінса не вдалося зробити лише тому, що ми намагалися видалити неіснуючий файл.
noclobberу bash), або, можливо, chmod-ing існуючого файлу, щоб перенаправлення не вдалося, якщо файл існує (не уникнути умови перегону), але все, що буде робити, це зробити помилок більш тонкими.
Ще одна командна лінія, яку я використав:
[ -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 перевіряє, чи файл існує
Вступ до, якщо для отримання додаткової інформації
EDIT: -e, що використовується з -f, є надлишковим, для використання -f тільки повинно працювати також
-aзастаріло, -eзамість цього використовуйте .
-f.
-eв -feнадлишку, як -fі перевіряє існування файлу, наскільки я знаю ..
if [ $( ls <file> ) ]; then rm <file>; fi
Крім того, якщо ви переспрямовуєте свій висновок >замість >>нього, він замінить попередній файл
fileщось подібне5 -lt 2
rm $my_file, правда? Яку оболонку ви використовуєте?