1

В каталоге я хочу удалить некоторые подкаталоги, исключая другие. Некоторые по владельцу, а некоторые по имени. Я настроил для каждой страницы справочника, но никакие файлы не удалены, даже те, которые явно не исключены. Во время тестирования Если я удаляю все параметры исключения, тогда все все файлы удаляются, как и следовало ожидать. Я не получаю ошибки при запуске, просто ничего не происходит. Был бы признателен за обзор сценария. Имена изменены, чтобы защитить невинных.

find /nobackup/. -name '*' -type d ! -user 'foo' \! -user 'foo1' ! -user 'foo2' ! -user 'foo3' \! -user 'foo4' ! -name 'acmecache' -delete

2 ответа2

0

Сценарий кажется правильным.

Он выполняет следующее: удаляет все каталоги в /nobackup и ниже, которые не принадлежат пользователям foo , за исключением также каталогов, называемых acmecache.

Аргумент -name '*' кажется совершенно ненужным.

Также учтите, что -delete удаляет только пустые каталоги. Но напечатает ошибку, если каталог не пустой.

0

Я бы добавил -depth чтобы деревья файлов могли быть удалены за один проход. Имя -name '*' имеет значения.

Ваше описание говорит, что вы хотите удалить определенные каталоги. -delete только пустые каталоги. Ваш код в том виде, в котором он написан, с радостью спустится в каталог acmecache и удалит все каталоги, которые не принадлежат пользователям the_foo * _. Я собираюсь предположить, что это не то, что вы хотели, поэтому вам нужно использовать -prune .

Попробуйте это вместо этого. Уберите echo когда вы довольны результатом

find /nobackup -depth -type d \( \( -user 'foo' -o -user 'foo1' -o -user 'foo2' -o -user 'foo3' -o -user 'foo4' -o -name 'acmecache' \) -prune \) -exec echo rm -rf {} \;

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