Удалите файлы и каталоги даже если не пустой, кроме некоторых каталогов

Просто понятый это при рытье через переменные среды, я также должен установить $XAUTHORITY к чему переменная находится в нормальном входе в систему.

XAUTHORITY=/home/myusername/.Xauthority DISPLAY=:0.0 notify-send --urgency=low -i python "The job has finished"
2
03.07.2014, 22:22
2 ответа

-тип f найдет только файлы, а не каталоги. -maxdepth 0 найдет только тот каталог, в котором вы ищете (.). Вы должны найти файлы, которые на самом деле хотите передать в rm.

Стандартный способ сделать это - исключить каталоги и все их содержимое вот так (непроверено!):

find . -mindepth 1 \( -name '*log*' -o -name 'crash-reports' -o -name 'world*' \) -prune -o -print
2
27.01.2020, 22:13

То, что вы хотите, невозможно IMHO с одним запуском найти , если вы не знаете, что все каталоги, которые нужно пропустить, находятся на первом уровне каталога.

первый шаг

В первом запуске удалите все файлы (а точнее: не-директорий):

find . \( -type d \
  \( -name '*log*' -o -name 'world*' -o -name 'crash-reports' -o -name 'banned-ips*' \) \
  -prune \) -o \( -type d -o -print \)

второй шаг

Создайте фиктивный файл в каждой (sub)директории, который нужно пропустить:

find . -type d \( \
  \( -name '*log*' -o -name 'world*' -o -name 'crash-reports' -o -name 'banned-ips*' \) \
  -o \( -path '*/*log*/*' -o  -path '*/world*/*' -o  -path '*/crash-reports/*' -o  -path '*/banned-ips*/*' \) \) \
  -exec touch {}/dontdeletethisdirecory

третий шаг

Теперь все пустые директории могут быть удалены. Простой подход заключается в передаче всех каталогов в rmdir. Только пустые каталоги удаляются:

find . -depth -type d -exec rmdir {} \;

опционально на последнем шаге

Теперь вы можете удалить фиктивные файлы:

find . -type -f -name dontdeletethisdirecory -delete
0
27.01.2020, 22:13

Теги

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