Команда Linux FIND с примерами

Знаете ли вы, сколько файлов в новой установке Linux ? Если вы используете PopOS! Например, дистрибутив Linux(Linux distribution) содержит более 31 000 файлов. Это еще до того, как вы начнете создавать какие-либо документы, хранить музыку, загружать PDF(PDFs) -файлы или упорядочивать изображения.

Из-за этого поиск нужного файла или папки в Linux , когда вам это нужно, становится проблемой. В этой статье вы узнаете, как использовать команду Linux FIND , и мы дадим вам все возможные примеры.

Синтаксис команды Linux FIND(Linux FIND Command Syntax)

Синтаксис относится к тому, как слова или команды объединяются. Точно(Just) так же , как обычное предложение может превратиться в бессмыслицу, если просто перетасовать слова, команды могут дать сбой, если они используются с неправильным синтаксисом.

найти [путь] [условия] [действия](find [path] [conditions] [actions])

Вот что это значит:

find — запускает утилиту Find в (Find)Linux .

путь(path ) - где искать

условия(conditions ) — аргументы, которые вы хотите применить к поиску

действия(actions ) - что вы хотите сделать с результатами

Простой пример с использованием всех трех выглядит так:

найти . -имя файла-sample.rtf -print(find . -name file-sample.rtf -print)

Как вы уже догадались, это найдет файл с именем file-sample.rtf

Путь с точкой ( . ) указывает find искать в текущем каталоге и во всех каталогах внутри него. 

Условие -name сообщает find, что нужно получить файл с этим конкретным именем.

Действие -print указывает FIND показать результаты на экране.

Точка и -print являются значениями по умолчанию для команды find. Так что он все равно будет делать то же самое, если вы их не используете. Итак, find -name file-sample.rtf даст вам те же результаты.

Linux НАЙТИ в другом каталоге(Linux FIND In Another Directory)

Вы можете искать в каталоге, отличном от того, в котором вы находитесь. Просто(Just) вставьте путь к каталогу после FIND . Если вы находитесь в корне и знаете, что файл находится где-то в home/user каталоге, вы должны использовать:

find home/user -name file-sample.rtf

Это по-прежнему рекурсивный поиск, поэтому он будет проходить через каждый каталог под пользователем(user) .

Linux FIND Поиск в нескольких каталогах(Linux FIND Search Multiple Directories)

Если вы хотите искать сразу в нескольких каталогах, просто перечислите их в команде через пробел.

find /lib /var /bin -name file-sample.rtf

Linux FIND без рекурсии или с ограничением рекурсии(Linux FIND with No Recursion or Limiting Recursion)

Если бы вы использовали команду FIND выше на корневом уровне, она просмотрела бы все каталоги в системе. Поэтому, если вы хотите придерживаться только текущего каталога, используйте параметр -maxdepth . Число после -maxdepth говорит Find, насколько глубоко нужно пройти перед остановкой. 

Использование -maxdepth 1 означает только этот каталог. 

find -name file-sample.rtf -maxdepth 1

Использование -maxdepth 2 или большего числа означает, что нужно пройти на столько же уровней глубже.

найти -maxdepth 5 -имя файла-sample.rtf(find -maxdepth 5 -name file-sample.rtf)

Пример подстановочного знака FIND для Linux(Linux FIND Wildcard Example)

Команда НАЙТИ(FIND) использует звездочку ( * ) в качестве подстановочного знака. Используйте его для любой части имени, в которой вы не уверены. Его можно использовать в имени более одного раза. Если тип файла не является частью имени файла, результаты также будут включать совпадающие каталоги.

find home/user -name file*sample*

Пример Linux FIND по типу(Linux FIND by Type Example)

Чтобы искать только файл или каталог, используйте параметр -type и соответствующий дескриптор. Их несколько, но наиболее распространены файловые и каталоговые:

ф - файл

д – каталог

б – блочное устройство

c - символьное устройство

л – символическая ссылка

с – розетка

find home/user -name file*sample* -type d

Пример Linux FIND без учета регистра(Linux FIND Case Insensitive Example)

В отличие от Windows , Linux заботится о том, является ли буква прописной или строчной. Так что, если вы хотите, чтобы он искал как File-Sample.rtf , так и file-sample.rtf, используйте параметр -iname .

find home/user -iname File-Sample.rtf

Пример поиска нескольких файлов в Linux(Linux FIND Several Files Example)

Допустим, вы хотели найти версии файла в форматах .rtf и .html. Это можно сделать одной командой с помощью оператора -o (или). (-o)В некоторых дистрибутивах вам может потребоваться поместить имена в скобки, например ( -name file-sample.rtf -o -name file-sample.html )

find home/user -name file-sample.rtf -o -name file-sample.html

Linux FIND файлы, имена которых не совпадают(Linux FIND Files That Don’t Match a Name)

Возможно, вы знаете, что существует версия файла .html , но не знаете, есть ли другие. Вы можете отфильтровать версию .html из поиска, используя опцию -not .

find home/user -name file-sample* -not -name *.html

Linux FIND без ошибок(Linux FIND Without Error Results)

Обратите внимание, что в примере с поиском без рекурсии перечислены все каталоги, в которых поиск невозможен, и правильный результат. Это раздражает. Давайте не будем показывать все эти каталоги(Permission) с отказом в доступе. Объедините его с другой командой терминала Linux(Linux terminal command) , grep. Вы также можете использовать Find с grep для поиска файлов с определенными словами в них(find files with specific words in them) .

find -maxdepth 5 -name file-sample.rtf 2>&1 | grep -v “Permission denied”

Давайте разберем 2>&1 .

2 — представляет stderr , сокращение от стандартного вывода ошибок. 

1 - представляет стандартный вывод(stdout) , который является сокращением от стандартного вывода.

> — означает перенаправить любой вывод слева от него на то, что находится справа от него.

& – означает собрать.

Итак , 2>&1 означает взять стандартные ошибки и перенаправить их, а затем объединить их со стандартным выводом в один вывод.

Теперь давайте посмотрим на | grep -v “Permission denied” .

| (называемый каналом) — указывает Linux передавать результаты того, что находится слева от него, тому, что находится справа от него. Он передается команде grep.

grep — утилита для текстового поиска. 

-v — указывает grep искать все, что не совпадает с текстом слева от -v. В этом случае он говорит grep находить только то, что не содержит текста или строки « Отказано(Permission) в доступе ». Таким образом, grep покажет вам только те результаты, которые вы ищете, и любые ошибки, которые не соответствуют « Отказано(Permission) в доступе ».

Пример Linux FIND по разрешениям(Linux FIND by Permissions Example)

Чтобы использовать это хорошо, вам нужно изучить разрешения Linux(learn Linux permissions)

Все файлы примеров имеют разрешения 664, кроме одного с разрешениями 775. Используйте параметр -perm , чтобы найти его.

find Documents/ -name file-sample* -type f -perm 775

Пример Linux FIND по размеру(Linux FIND by Size Example)

Поиск файлов по размеру удобен для того, чтобы эти огромные файлы заполнили ваш жесткий диск. Используйте параметр -size, нужный размер и один из следующих суффиксов. Если суффикс не используется, -size по умолчанию принимает значение b . Чтобы найти файлы, равные или превышающие определенный размер, поставьте знак плюс (+) перед размером.

М - Мегабайты

Г – гигабайты

к - килобайты

б — блоки (512 байт — по умолчанию)

в - байты

w – слова (два байта вместе)

find -size +500k

Linux НАЙТИ по владельцу(Linux FIND by Owner)

Есть два способа найти файлы по владельцу. Один — по имени пользователя владельца, а другой — по группе пользователя. Чтобы найти по имени пользователя, используйте параметр -user , за которым следует имя пользователя. Чтобы выполнить поиск по группе пользователей, используйте -group , за которой следует имя группы.

найти -user(find -user groupname ) имя группы или найти -user имя пользователя(find -user username)

Linux FIND Files по последнему измененному примеру(Linux FIND Files by Last Modified Example)

Чтобы найти файлы, которые были изменены или отредактированы за последние X дней, используйте -mtime , за которым следует число. Поставив знак минус ( - ) перед числом, вы найдете все, что было изменено в течение этого количества дней до настоящего момента. Знак плюс ( + ) означает, что в течение этого количества дней до настоящего времени. 

find -name “file-sample*” -mtime +5 (greater than 5 days ago)

find -name “file-sample*” -mtime -5 (less than 5 days ago)

Чтобы найти по последнему изменению в минутах, используйте параметр -mmin, за которым следует количество минут. Используйте + и – как указано выше.

find -name “file-sample*” -mmin -5

find -name “file-sample*” -mmin +5

Пример поиска файлов Linux по времени последнего доступа(Linux FIND Files by Last Accessed TIme Example)

Для поиска файлов по дате их последнего открытия используется параметр -atime для дней и -amin для минут. Следуйте за ним, указав количество дней или минут, чтобы вернуться назад, и используйте знак + и - как больше или меньше.

find -name “file-sample*” -atime -5

find -name “file-sample* -amin -5

Объедините ПОИСК с другими командами Linux(Combine FIND with Other Linux Commands)

Выше приведен один пример использования find с командой grep, и вы можете использовать его со многими другими. Вы можете видеть, что использование find и других команд может быть очень мощным и значительно сэкономить время. Представьте(Imagine) , что вам нужно удалить кучу файлов определенного типа. Вместо того, чтобы искать в проводнике, просто создайте правильную команду, и это будет сделано за считанные секунды. Как вы теперь будете использовать команду find?



About the author

Я инженер-программист с более чем 10-летним опытом работы в индустрии Xbox. Я специализируюсь на разработке игр и тестировании безопасности. Я также являюсь опытным обозревателем и работал над проектами для некоторых из самых известных игровых компаний, включая Ubisoft, Microsoft и Sony. В свободное время я люблю играть в видеоигры и смотреть сериалы.



Related posts