10

Я запускаю следующую команду:

find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;

Я хотел бы удалить все папки в папке processing (папка обработки никогда не должна удаляться).

Команда также удаляет папку processing . Как ограничить скрипт для удаления только папок в этой папке?

3 ответа3

23

Самый простой способ - просто добавить -mindepth 1 , который пропустит первую иерархию глубины и, таким образом, пропустит ваш родительский каталог.

Кроме того, вам не нужен дополнительный вызов -exec для rm , вы можете просто delete папки напрямую, если они пусты.

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -delete

Если они не пусты:

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -exec rm -rf {} \;

Если вы ленивый, вы также можете расширить шаблон. Поскольку * не включает текущий каталог по умолчанию (если не установлен dotglob), вы также можете сделать:

find /var/www/html/content/processing/* -type d -mtime +1 -delete

Однако это также не включает скрытые папки, опять же из-за опции dotglob .

4

Проблема в том, что find возвращает текущий каталог (.) Вместе с другими каталогами, поэтому удаляет папку обработки, а также подкаталоги. Быстрый способ обойти это было бы добавить опцию

-not -name .

который останавливает поиск при выводе текущего каталога и, в свою очередь, останавливает его удаление.

Это сработало бы, если бы вы выполняли команду в каталоге обработки, чтобы учесть тот факт, что вы используете абсолютный путь:

-not -name /var/www/html/content/processing

И вся команда будет:

find /var/www/html/content/processing -type d -mtime +1 -not -name /var/www/html/content/processing -exec rm -rf {} \;
0

Уже ответил, все же я хотел бы перечислить другой подход.

find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d

Это исключит верхний каталог (а также подкаталоги), и теперь вы можете применить любую команду, которую мы хотим применить к нему.

>> Варианты:
-mindepth 1: исключить корневой каталог
-maxdepth 1: чтобы избежать анализа подкаталогов. (Для конкретного сценария, который подвергается сомнению, вам это не нужно).
-type d: список только типов каталогов. Эта опция должна появиться после использования mindepth maxdepth.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .