Как исключить определенные пути с помощью команды find в Linux

Опубликовано: 20 Февраля, 2023

Команда find в Linux — очень полезная утилита командной строки, которая помогает нам находить файлы и каталоги. В нашей повседневной жизни есть много задач, в которых нам требуются файлы, которые могут находиться глубоко внутри системы, и найти их вручную было бы утомительной задачей. Таким образом, команда find пригодится.

Мы можем улучшить производительность этой команды, исключив определенные файлы и каталоги, чтобы она не просматривала их.

Способы исключения путей командой find:

Метод 1: флаг -prune

Синтаксис:

find <path_of_the_file> -prune

Ради этой статьи мы будем создавать образцы файлов и каталогов, которые будут использоваться в демонстрационных целях.

mkdir dir1 dir2 dir3
touch dir1/cat dir1/dog dir1/ant
touch dir2/apple dir2/cherry dir2/grape
touch dir3/car dir3/bus dir3/bike

Давайте посмотрим на дерево этой системы каталогов: (установите команду дерева с помощью sudo apt install tree )

Теперь мы будем использовать параметр -prune , чтобы исключить определенный путь при поиске:

find . -path ./dir3 -prune -o -print

Это позволит системе искать все каталоги, кроме каталога dir3 .

Для простоты мы поместили все три каталога в образец каталога, чтобы не искать все файлы в системе, иначе список был бы слишком длинным. Из вывода видно, что dir3 был исключен, а все остальные каталоги были напечатаны.

Исключение нескольких каталогов:

Мы также можем исключить несколько путей, если хотим:

find . ( -path ./dir1 -prune -o -path ./dir3 -prune ) -o -print

Оба каталога были исключены из поиска.

Способ 2: флаг -not

Флаг -not также можно использовать для исключения каталогов из области поиска:

Синтаксис:

find . -type f -not -path "*/directory_name/*"

Исключим dir1 из области поиска:

find . -type f -not -path "*/dir1/*"

Флаг not также исключает каталог dir1 , хотя его синтаксис немного сложен, он выполняет то же действие.

Способ 3: «!» оператор

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

Синтаксис:

find . -type f  !  -path "*/directory_name/*"

Теперь исключим каталог dir2:

find . -type f  !  -path "*/dir2/*"

С помощью ! оператора второй каталог (dir2) не искался.

Таким образом, это были три способа, которыми вы можете исключить определенные пути из области действия команды find.