Как исключить определенные пути с помощью команды find в Linux
Команда 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.