1

Я использую find /home/myid/dir-with100directories/ -mmin -5 -not -path "*/2012/* чтобы найти все файлы, кроме каталога 2012, но почему-то он работает очень медленно.

И я думаю, что поиск выглядит во всех каталогах, просто не показывает / скрывает результаты за 2012 год? Я прав или я не прав?

2 ответа2

2

Если вы хотите исключить путь, вам нужно, чтобы он правильно совпал в опции -path . Опция требует, чтобы вы указали полностью совпадающий путь, включая префикс абсолютного пути, поэтому просто /2012/ недостаточно.

find /home/myid/dir-with100directories/ -mmin -5 \
-not -path '/home/myid/dir-with100directories/2012/*'

Или же:

cd /home/myid/dir-with100directories/
find . -mmin -5 -not -path './2012/*' 

Если вы хотите исключить любую папку с именем 2012 в ней - с помощью GNU find:

cd /home/myid/dir-with100directories/
find . -regextype posix-extended -not -regex '.*/2012\(/.*\)?'

Или, чтобы удалить каталоги с именем 2012:

cd /home/myid/dir-with100directories/
find . -type d -and -name '2012' -prune -o -print

Выше будет распечатывать все остальное как действие (см. Здесь для получения дополнительной информации).


Если вы используете Bash, вы можете сразу пропустить каталог 2012 :

shopt -s extlob
find /home/myid/dir-with100directories/!(2012) -mmin -5

Та же идея с Zsh:

setopt extendedglob
find /home/myid/dir-with100directories/^2012 -mmin -5
0

Смотрите опцию -prune на странице справки по find и пример, приведенный в описании опции -path .

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