Команда ‘find‘ используется для поиска информации в файловой системе. Из-за сильной разветвленности файловой системы, найти нужный объект бывает непросто. find помогает облегчить такую задачу.
В простейшем варианте команда поиска пути к файлу (path) по его имени (filename) выглядит следующим образом:
$ find path -name filename
После имени команды find, параметра path и ключа -name здесь указано имя искомого файла: filename.
После имени команды можно указать путь к каталогу, в котором нужно указать путь к каталогу, в котором нужно производить поиск. Поиск будет включать все подкаталоги. Также можно указать несколько каталогов подряд.
$ find /etc /home -name filename
Эта команда произведет поиск файла filename в каталогах /etc и /home.
После ключа -name можно указать имя файла или шаблон, по которому нужно искать файлы. Например, следующая команда найдет в системе все файлы с именем passwd.
$ find / -name passwd
Если вы не помните точное имя файла: passwd или password, в этом случае можно указать следующий шаблон:
$ find / -name passw*d
Под этот шаблон попадают оба имени файла. Символ * соответствует любому набору любых символов и даже отсутствию символов.
Ключи
-name -осуществляет поиск по имени файла.
-size число — позволяет указать размер файла, если вы его точно знаете. По умолчанию размер указывается в блоках размером 512 Кбайт. Если нужно указать размер в байтах, то после числа укажите букву c.
-print — заставляет вывести содержимое файла в консоль.
-mtime число — в качестве параметра число можно указать количество дней, прошедших со дня последнего редактирования файла. Например, если вы вчера редактировали файл с именем file.txt, но не помните куда его сохранили, то выполните следующую команду
$ find / -name file1.txt -mtime 1
-type тип — этот ключ позволяет указать тип файла. В качестве типа можно указать следующее:
- d — каталог
- f — обычный файл
- p — именованный канал
- l — символическая ссылка
Полезное применение
Поиск содержимого файла
С помощью команды find можно искать не только имена файлов или каталогов, но и осуществлять поиск по содержимому файлов. Очень полезным в этом случае будет следующая команда:
$ find . -type f -name "*" -print | xargs grep "искомый текст"
Здесь в качестве начального каталога для поиска указана точка, т. е. поиск будет начат с текущей папки, но можно указать и другой путь поиска. Потом указывается тип искомых файлов. В данном случае ограничиваемся только файлами. В качестве имени указана звездочка, что соответствует всем файлам. Ключ -print заставляет отображать содержимое файла.
Далее вывод команды передается, с помощью вертикальной черты, команде xargs, которая объединяет полученные на входе данные и выполняет команду grep. В свою очередь команда grep ищет в тексте, которая подается на вход строку, указанную в качестве параметра.