Как часть сценария развертывания, я хочу сбросить некоторые кэшированные данные из моего временного каталога. Я использую команду как:
rm /tmp/our_cache/*
Однако, если /tmp/our_cache
он пуст (довольно часто встречается при быстрой смене множества изменений на нашем тестовом сервере), выдается следующее сообщение об ошибке:
rm: cannot remove `/tmp/our_cache/*': No such file or directory
Это не имеет большого значения, но немного уродливо, и я хочу сократить отношение шум / сигнал в выходных данных этого сценария.
Какой краткий способ в unix удалить содержимое каталога, не получая сообщений с жалобами на то, что каталог уже пуст?
Редактировать 1
удалены "-типа F
Редактировать 2
Добавлена нестандартная опция
-mindepth 1
для предотвращения удаления корневого каталога поиска (после снятия-type f
ограничения).источник
-type f
так как могут быть и временные каталоги (хотя пример в вопросе не учитывает их, поэтому, вероятно, их там нет ...)-type f
удалит только обычные файлы, поэтому символические ссылки, например, не будут удалены./tmp/our_cache
так что вы могли бы также сделатьrm -r /tmp/our_cache
. Пока вы используете нестандартные опции, вы можете использовать-mindepth 1
. Обратите внимание, что в отличие отrm /tmp/our_cache/*
него также удаляются подкаталоги, их содержимое и скрытые файлы.Вы можете перенаправить стандартную ошибку, чтобы
/dev/null
она не распечатывалаисточник
Другой способ (хотя и немного перебор ...):
это использует
test
или[
для проверки, не является ли строка, возвращенная при запуске вls
вашем каталоге, не пустой. Тогда, если и только если эта строка НЕ пуста, она удалит все, что находится в вашем каталоге.ПРИМЕЧАНИЕ: оставление шарика вне
ls
будет подавлять ошибку отсутствия файлов.источник
Если ваш скрипт используется в BASH, вы можете попробовать:
Это все равно приведет к ошибке, если есть «реальная» проблема или если файл защищен (тогда вам понадобится
-f
модификаторrm
для удаления файлов этого типа), но будет избегать ошибки, когда нет файлов.Если для сценариев вы используете другую оболочку, отличную от BASH, например zsh, ksh, вы можете использовать другой синтаксис, который может быть более переносимым:
источник