Как предотвратить сообщение rm о том, что файл не найден?

Я использую rm в BASH script для удаления многих файлов. Иногда файлов нет, поэтому он сообщает о многих ошибках. Мне не нужно это сообщение. Я искал man-страницу для команды, чтобы сделать rm тихим, но единственный найденный мной вариант - -f, который из описания, "игнорировать несуществующие файлы, никогда не запрашивать", кажется правильным выбором, но имя похоже не подходит, поэтому я обеспокоен тем, что это может иметь непреднамеренные последствия.

  • Является ли параметр -f правильным способом тишины rm? Почему он не называется -q?
  • Эта опция делает что-то еще?

Ответ 1

Основное использование -f - принудительное удаление файлов, которые не удаляться с помощью rm сам по себе (как частный случай, он "удаляет", несуществующие файлы, тем самым подавляя сообщение об ошибке).

Вы также можете просто перенаправить сообщение об ошибке с помощью

$ rm file.txt 2> /dev/null

(или эквивалент вашей операционной системы). Вы можете проверить значение $? сразу после вызова rm, чтобы увидеть, действительно ли файл удален или нет.

Ответ 2

Да, -f - наиболее подходящий вариант для этого.

Ответ 3

-f - правильный флаг, но для тестового оператора не rm

[ -f "$THEFILE" ] && rm "$THEFILE"

это гарантирует, что файл существует и является обычным файлом (а не каталогом, устройством node и т.д.)

Ответ 4

\rm -f file никогда не сообщит, что не найден.

Ответ 5

Поскольку rm -f делает "что-нибудь еще", оно принудительно (-f является сокращением для --force) тихим удалением в ситуациях, когда rm в противном случае запрашивает подтверждение. Например, при попытке удалить файл, который не может быть перезаписан вами из каталога, доступного для записи.

Ответ 6

У меня была такая же проблема для cshell. Единственное решение, которое у меня было, - создать фиктивный файл, который соответствует шаблону до "rm" в моем script.