Как предотвратить сообщение 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.