Я запускаю следующую команду:
find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;
Я хотел бы удалить все папки в processing
папке (папка обработки никогда не должна удаляться).
Команда также удаляет processing
папку. Как ограничить скрипт для удаления только папок в этой папке?
Ответы:
Самым простым способом было бы просто добавить
-mindepth 1
, что пропустит первую иерархию глубины и, таким образом, пропустит ваш родительский каталог.Кроме того, вам не нужен дополнительный
-exec
вызовrm
, вы можете простоdelete
напрямую создавать папки, если они пусты.Если они не пусты:
Если вы ленивый, вы также можете расширить шаблон. Поскольку
*
по умолчанию не включает текущий каталог ( если онdotglob
не установлен ), вы также можете сделать:Однако это также не включает скрытые папки, опять же из-за
dotglob
опции.источник
Проблема в том, что find возвращает текущий каталог (.) Вместе с другими каталогами, поэтому удаляет папку обработки, а также подкаталоги. Быстрый способ обойти это было бы добавить опцию
который останавливает поиск при выводе текущего каталога и, в свою очередь, останавливает его удаление.
Это сработало бы, если бы вы выполняли команду в каталоге обработки, чтобы учесть тот факт, что вы используете абсолютный путь:
И вся команда будет:
источник
-name
относится к базовому имени, оно никогда не совпадает с косой чертой. Вам, вероятно, нужно использовать-path
.Уже ответил, все же я хотел бы перечислить другой подход.
find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d
Это исключит верхний каталог (а также подкаталоги), и теперь вы можете применить любую команду, которую мы хотим применить к нему.
>> Опции:
-mindepth 1: исключить корневой каталог.
-Maxdepth 1: избежать анализа подкаталогов. (Для конкретного сценария, который подвергается сомнению, вам это не нужно).
-type d: список только типов каталогов. Эта опция должна появиться после использования mindepth maxdepth.
источник
-maxdepth 1
? Почему-type d
дважды? Чем это отличается от принятого ответа?