У меня есть скрипт bash, который я хочу удалить файлы из разных каталогов. Часто их не будет, потому что они не были созданы, и это нормально. Есть ли способ заставить скрипт не сообщать об этой ошибке, но если у rm есть какой-то другой вывод, чтобы сообщить об этом?
С другой стороны, есть ли лучшая команда для удаления файла, который будет менее шумным?
Если ваше требование является то , что
rm
не жалуется на отсутствующие файлы, но вы также хотите какой - либо другой выводrm
, мое предложение было бы первым испытанием для существования целевого файла, и только позвонитьrm
( без с-f
флагом) , если файл существует на самом деле.Вызов
rm -f
файла, который, например, не имеет разрешений на запись пользователя, удалит файл и также не выдаст обычное приглашение для этого сценария.Если вы хотите использовать одну и ту же идею с несколькими файлами, я бы создал определение функции, например:
Используйте это как:
qrm file1 file2-does-not-exist *.txt etc here
источник
Вы заявили, что по-прежнему хотите видеть другие выходные данные
rm
команды при ее запуске, но использование этой-f
опции подавит их. Вам нужно будет отфильтровать STDERR для того, что вы хотите, что немного сложно, если вы хотите, чтобы все остальное показывалось.Вы захотите использовать такую команду:
Команда объяснила:
-f
Аргумент должен проходить, а не запрашивать подтверждение или ошибки3>&1 1>&2 2>&3 3>&-
это переключение между STDOUT и STDERR для фильтрации (вы можете прочитать об этом здесь, если хотите| grep -v 'No such file or directory'
отфильтровывает сообщение, которое вы не хотите видетьТеперь, если вы просто хотите полностью исключить сообщения об ошибках, вы можете выполнить следующую команду:
Эта команда перенаправляет STDERR в / dev / null, поэтому вы не увидите его при запуске команды.
источник
rm
без-v
вывода никогда в stdout, только в stderr, поэтому в этом случае вы могли бы просто2>&1 | grep
без танца, который более полезен в целом,В качестве альтернативы вы можете использовать
find
команду с-delete
опцией. Это (очевидно) удалит только те файлы, которые он найдет, поэтому он никогда не предупредит, если их нет. Примером может быть:который будет искать в
/var/log/triffids/
каталоге и удалять все файлы с.log
суффиксом, которые не были изменены в течение более 30 дней.Это всегда хорошая идея , чтобы запустить эти команды без в
-delete
опции первых, чтобы убедиться , что он найти файлы , которые вы ожидаете.источник
Проверьте
--force
(-f
) вариантrm
:источник
Это взлом, но вы всегда
touch
можете удалить файл. Если он не существует, он будет создан, поэтомуrm
можете удалить его.источник
Вы можете использовать,
-f
как и будет, согласно странице руководства:ничего вам не подскажет, и будет делать именно то, что вы хотите.
источник
Есть два основных способа: если вы добавите параметр -f, он не покажет ошибку «не существует» и два: (работает почти для любой команды) вместо того, чтобы просто выполнить «команду», выполнить команду 2> / dev / null ", где" thecommand "- это команда, которую вы выполняете.
источник