Удалите файлы в каталоге без erroring, если это уже пусто

Кажется, что проблемой было неправильное отображение жесткого диска.
Если USB был включен во время начальной загрузки, жесткий диск был распознан как hd1; но если не было USB, он был распознан как hd0.

Решенный проблема путем изменения grub.conf для использования hd0.

31
15.03.2013, 18:44
5 ответов

Так как Вы, по-видимому, хотите удалить все файлы без запроса, почему не просто используют -f переключатель к rm проигнорировать несуществующие файлы?

rm -f /tmp/our_cache/*

Из страницы справочника:

-f, --force
          ignore nonexistent files, never prompt

Кроме того, если могут быть какие-либо подкаталоги в /tmp/our_cache/ и Вы хотите их, и их содержание, удаленное также, не забывайте -r переключатель.

50
27.01.2020, 19:37
  • 1
    самое очевидное решение и я не думали об этом! Я чувствую себя подобно первому парню на этом комическом xkcd.com/399 ;-) –  Huygens 15.03.2013, 21:02
find /tmp/our_cache/ -mindepth 1 -delete

Редактирование 1

удаленный "-тип f

Редактирование 2

Добавленная нестандартная опция -mindepth 1 для предотвращения поискового корневого каталога, который будет удален (после того, как взятие -type f ограничение далеко).

6
27.01.2020, 19:37
  • 1
    Просто примечание, я не учел бы -type f с тех пор могут быть временные каталоги также (хотя пример в вопросе не составляет их, таким образом, они, вероятно, не там...), использование –  Izkata 15.03.2013, 20:18
  • 2
    -type f только удалит регулярные файлы, таким образом, символьные ссылки, например, не были бы удалены. –  Huygens 15.03.2013, 20:58
  • 3
    @rush Извините, я не проверял, что, но просто взглянул на страницы справочника, который говорит, "Удаляет файлы", не упоминая каталоги во всяком случае. Я удаляю свой комментарий. –  Hauke Laging 15.03.2013, 20:58
  • 4
    Это удаляет /tmp/our_cache таким образом, Вы могли бы также сделать rm -r /tmp/our_cache. В то время как Вы при использовании нестандартных опций, Вы могли использовать -mindepth 1. Отметьте это вопреки rm /tmp/our_cache/*, это также удаляет подкаталоги и их довольный и скрытые файлы. –  Stéphane Chazelas 15.03.2013, 22:30

Можно перенаправить стандартную погрешность к /dev/null так, чтобы это печать привычки это

$  rm /tmp/our_cache/* 2>/dev/null
3
27.01.2020, 19:37
  • 1
    Это также не подавило бы ошибки, показанные, если, скажем, файл не может быть удален, потому что он используется? Единственная ошибка, которую я хочу подавить, является одним показанным, если целевой каталог пуст; это кажется, что имело бы нежелательные побочные эффекты. –  Mark Amery 15.03.2013, 18:54
  • 2
    Даже при попытке удалить некоторый файл, который некоторый процесс открыл, Вы, привычка получает ошибку. –  pradeepchhetri 15.03.2013, 19:03

Иначе (хотя немного излишество...):

[ ! -z "$(ls -A /tmp/our_cache/)" ] && rm -rf /tmp/our_cache/*

это использует test или [ протестировать если строка, возвращенная из выполнения ls на Вашем каталоге не пусто. Затем, если, и только если, та строка не пуста, делает она удаляет все в соответствии с Вашим каталогом.

Примечание: отъезд шарика из ls подавит ошибку никаких файлов.

1
27.01.2020, 19:37

Если Ваш сценарий использует Bash, можно попробовать:

if test "$(ls /tmp/our_cache/)" !=  ""; then rm /tmp/our_cache/*; fi

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

При использовании другой оболочки, чем Bash для сценариев, таких как zsh, ksh, можно попробовать этот другой синтаксис, который мог бы быть более портативным:

if [[ "$(ls /tmp/our_cache/)" !=  "" ]]; then rm /tmp/our_cache/*; fi
-1
27.01.2020, 19:37

Теги

Похожие вопросы