Как сделать поиск файлов linux по расширению

Добавил пользователь Алексей Ф.
Обновлено: 10.09.2024

Каждый пользователь желает быстро и без особых затруднений находить требуемую информацию. Существует большое количество типов файловых менеджеров, которые имеют отличную функциональность. Одним из самых лучших является терминал Linux. Он отличается высокой эффективностью и хорошей гибкостью.

С помощью терминала Linux можно без особого труда найти требуемые файлы не только по имени, но и по дате их обновления. Для поиска еще можно указать содержимое и различные регулярные выражения. Терминалом очень удобно пользоваться, так как с найденными данными сразу же можно осуществлять определенные действия.

Синтаксис

"find"- это одна из самых популярных и особенно важных утилит, которая устанавливается в операционной системе Линукс. Такая команда дает возможность быстро находить различные файлы и каталоги путем использования специальных условий. Она ищет требуемые данные по разрешению, собственнику, группе, объему, типу и иным условиям.

find [директория] [опции][критерии поиска](операторы) [действия]

  • Директория. Это путь, где поиск ищет требуемую информацию.
  • Опции. Здесь можно ввести дополнительные аргументы, а также настроить глубину.
  • Критерий. Перед поиском требуется определиться с критерием, с помощью которого будут найдены данные. К критериям относится имя файла, дата его создания, владелец, права и многое другое.
  • Операторы. Используются для объединения критериев поиска.
  • Действия. Устанавливаются предварительно. С их помощью отбираются нужные файлы.
  • -L - опция указывает, что нужно переходить по символическим ссылкам.
  • -P - указывает, что по символическим ссылкам не переходить.
  • -depth или -d - искать в директории в которой находишься, а также в подкаталогах.
  • -print - выводить на экран полные имена документов.
  • -type d - опция type показывает какой тип искать, буква d указывает на каталоги.
  • --type f - буква f указывает на поиск файлов.
  • -version - информация о версии утилиты.
  • -size - размер.
  • -name - искать по имени.
  • -group - искать по группе.
  • -nogroup - файлы, которые не относятся ни к одной группе.
  • -mtime - поиск по дате изменения документа.
  • -atime - искать по дате чтения.
  • -user - владелец документа.

ВАЖНО! Критерии можно объединять используя операторы.

  • -and - и.
  • -or - или.
  • -not - отрицание.
  • -exec команда \; - запустить команду
  • -ls - выполнить ls.

Примеры

Утилита, которая имеется практически во всех версиях Линукс, дает возможность быстро найти требуемую информацию. Для этих целей предварительно вводятся критерии поиска. Пользоваться командой можно по-разному, так как у нее много опций. Рассмотрим примеры.

Список папок и файлов директории

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

Имеется и альтернативный вариант – "find .".

Для обнаружения файлов в конкретной директории требуется в терминале набрать название утилиты и путь. Например /var/log

Искать в домашнем каталоге пользователя

Чтобы найти именно те файлы, которые относятся к определённому пользователю, нужно ввести команду

Дата модификации

Чтобы найти документы по дате, необходимо использовать критерии "mtime, atime".

Найдем все файлы в каталоге /home, которые открывались 120 дней назад.

find /home -atime 120

Почти тоже самое будет, если нужно найти документы, которые изменялись 120 дней назад.

find /home -mtime 120

Чтобы найти файл по имени в требуемой директории необходимо использовать опцию "-name".

find /var/log -name "test.log"

Поиск файлов определённого размера

Если требуется найти файл, размер которого известен пользователю, вводится -size с указанием размера.

Поиск файлов определённом диапазоне размеров

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

find / -size +12M -size -25M

Действие

Выполним команду ls в каталоге run, для документов, которые изменялись 150 дней назад. Будем использовать действие "ls".

find /run -mtime 150 -type f -ls

Запустим утилиту ls, в каталоге home, для файлов больше 5000 байт.

find /home -size +5000c -type f -exec cat\;

Поиск документов в нескольких директориях

Чтобы выполнить такой поиск, необходимо вводить пути директорий через пробел. Например /var /home.

find /var /home -name "file.txt"

Найдем документ test.txt без учета регистра в каталоге /home. Для этого, будем использовать "iname".

find /home -iname "test.txt"

Поиск файлов, которые отличаются от упомянутых

Зачастую пользователю нужно найти определенные данные, которые отличаются от определённого типа файлов. Для этих целей необходимо использовать оператор "-not" для отрицания.

find /root -not -name "*.txt"

По большому количеству критериев

$ find /var -regex ".*\.\(txt\|html\)$"

Использование оператора

Допускается одновременное совмещение нескольких критериев. Система обнаружит информацию, которая будет удовлетворять одному из условий. Для этих целей потребуется использование одного из операторов or (или), and (и), not (отрицание не).

find /var/log/exim4 -name "*.txt" -оr -name "test*"

Права доступа

Чтобы найти документ с определенными правами, используется критерий поиск -perm.

find /var/log -type f -perm 777

Почти тоже самое будет для папок с правами 777.

find /var/log -type d -perm 777

Поиск документов, у которых есть право на исполнение.

find /var/log -type f -perm /a=x

Найдем файлы в каталоге run, у которых есть право читать.

find /run -perm /u=r

Ищем все скрытые файлы

Для обнаружения скрытых файлов в директории необходимо ввести:

find /etc -type f name ".*"

Поиск всех файлов группы

Чтобы найти файлы, которые относятся к определённой группе, необходимо указать аргумент "group".

find /run -group apache

Существует множество способов применения find. Выше описаны лишь некоторые примеры, которые демонстрируют широкую функциональность утилиты.

В качестве вступительного слова дадим некоторое описание того, как вообще можно совершать поиск в linux. Для этих целей есть множество программ, но некоторые из них уже стали классикой поиска в linux. Подчеркнем, в данной статье мы сконцентрируемся исключительно на linux. Это означает, что даже если вы встретите утилиты с теми же самыми названиями в Solaris или операционных системах на ядрах BSD, приведенные советы могут работать не всегда. Так же это относится к busybox, которая реализует лишь небольшую часть функциональности оригинальных утилит.

Итак встречайте героев сегодняшнего обзора: locate - предоставляет поиск по имени файла в заранее подготовленной базе данных, find - работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep - утилите для поиска текста в файлах.

Чтобы выполнить просто поиск файла по имени в Linux логичнее использовать команду locate - за счет заранее подготовленной базы она быстро выдаст нужный результат:

Пользователям RedHat, CentOS и Fedora стоит выполнить

После установки нужно создать/обновить базу данных - файл, содержащий в себе "снимок" файловой системы, благодаря которому locate работает так быстро:

Т.е. вместо того, чтобы каждый раз проходиться по всей файловой системе, locate доверяет updatedb создать файл, содержащий в себе все имена и пути файловой системы, и выполняет поиск в нем. Важно поддерживать его актуальность, иначе вы можете случайно найти уже давно удаленные файлы, или не найти новые. Поэтому updatedb при инсталляции "вешается" на CRON и выполняется автоматически - вы можете в этом убедиться, посмотрев на файлы заданий CRON.

Куда более мощным и гибким инструментом для поиска файлов и папок в Linux выступает команда find. Её синтаксис упрощенно выглядит так:

find [path. ] [expression]

Поиск файла по имени

Чтобы выполнить в linux поиск файла по имени по всей файловой системе нужно ввести:

Учтите, что в данном случае поиск будет идти по имени файла в точности соответствующему заданному. Чтобы сымитировать поведение команды locate для find следует ввести:

"*" означает любое количество любых символов. Это дает нам возможность также производить поиск файлов по расширению:

Поиск файла по дате

Вот пример того, как можно выполнить поиск в Linux файла по дате:

Данная команды выведет все файлы из каталога /home, измененные не более 5-ти дней назад.

Поиск файла по размеру

А так, например, можно выполнит поиск файлов по размеру:

Данная команды выведет все файлы из каталога /home, имеющие размер более одного гигабайта. Очень удобно для поиска больших файлов в linux

Поиск папки

На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка - это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните

Здесь ключ "-type" указывает на тип. На текущий момент времени find поддерживает следующие типы:

  • b - блочное устройство
  • c - символьное устройство
  • d - папка (дирректория)
  • p - именнованный канал
  • f - обычный файл
  • l - символическая ссылка
  • s - сокет
  • D - дверь (только для Solaris)

Подробнее о различных параметрах поиска find вы можете почитать, введя команду

Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text - чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php. ) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.

Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести

Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы "root". Здесь ключ "-l" заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то "-l" стоит не указывать. Ключ "-r" выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ "-i" говорит не принимать во внимание регистр, т.е. grep будет искать не только слово "root", но и "ROOT", и "rOOt". Вы поняли

Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите

Крышка в начале слова "root" обязывает grep выводит только те файлы, где слово "root" стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии

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

Синтаксис команды find:

В качестве пути указывается директория, в которой необходимо производить поиск. К примеру, это могут быть значения такого вида:
. – текущий каталог
/ — корневой каталог
~ — домашний каталог

После указания пути так указываются опции поиска. С виду всё запутано, но на самом деле сложностей тут нет.

Основные опции:
-name — поиск по имени, задается шаблон поиска;
-user — поиск файлов принадлежащих конкретному пользователю;
-group — поиск файлов принадлежащих конкретной группе;
-perm — поиск файлов по режиму доступа;
-type — поиск файлов по типу, список типов:

  • b — специальный блочный файл;
  • d — каталог;
  • c — специальный символьный файл;
  • f — обычный файл;
  • l — символическая ссылка;
  • p — именованный канал;
  • s — сокет.

-size n — поиск файлов с размером n единиц;
-mtime -n +n — поиск файлов по дате изменения, менее (-) или более (+) дней назад.

Попробуем произвести поиск файлов, имитируя различные ситуации.
Найдем файлы на съемном устройстве, подключенном к USB, и предварительно смонтированном в системе.

Поиск файлов по расширению:

В результате выполнения данной команды будет произведен поиск в каталоге /mnt/usb – это каталог, в который смонтировано устройство. Поиск будет произведен по всем файлам (*), имеющим расширение .mp3.
Маску поиска можно менять довольно гибко, к примеру, можно задать ключевое слово, с которого начинается имя файла, и произвести по нему поиск.

Поиск файлов по начальному ключевому слову:

Поиск файлов по шаблону регулярного выражения:

Каждый более или менее знакомый с системами Linux знает, что режимы доступа к файлам дело весьма важное. Иногда бывает нужно найти файлы, имеющие конкретные заданные права, для этих целей можно воспользоваться поиском с опцией –perm.

Поиск файлов с режимом доступа 755:

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

Поиск файлов с правами для группы:

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

В следующем примере рассмотрим поиск файлов принадлежащих определенному пользователю или группе.

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

В результате поиска будет найдены файлы принадлежащие пользователю admin.

Поиск файлов, принадлежащие определенной группе пользователей:

Будут найдены файлы, которые принадлежат группе пользователей bots. Кроме этого можно производить поиск файлов, владельцами которых являются несуществующие пользователи или группы:

Возможность поиска определенных типов файлов так же является немаловажным функционалом. К примеру, если есть необходимость найти все символические ссылки в конкретной директории.

Поиск символических ссылок:

Поиск будет произведен в директории /etc, в которой будут отбираться все символические ссылки.

Бывает необходимо просмотреть список вложенных директорий, в каком либо каталоге, для таких задач есть следующая команда.

Просмотр вложенных директорий в каталоге:

На экран будет показан список директорий присутствующих в каталоге /mnt/usb. Теперь перейдем к следующей опции, это возможность поиска файлов установленного размера.

Поиск файлов по размеру:

В качестве следующего примера мы будем использовать возможность поиска файлов по времени его модификации. Для этих целей мы воспользуемся опцией –mtime.

Поиск файлов, измененных за последние 2 дня:

Поиск будет производиться в директории /var/www/html, и будут искаться файлы которые изменялись в течении последних 2-х дней. Пожалуй, одна из немаловажных и удобных опций поиска. Так же можно производить поиск по дате модификации с обратным условием. Давайте попробует найти файлы в директории, которые не изменялись в течении 5-ти дней.

Поиск файлов, не изменявшихся в течении 5-ти дней:

На этом пока всё, надеюсь, данные примеры вам помогли разобраться с данной командой. Её удобство представлено наглядно, и знать о её возможностях не будет лишним, особенно если вы собираетесь в дальнейшем работать с системой Linux. Навыки грамотного поиска файлов значительно экономит ваше личное время, а как известно время бесценно. Успехов в труде!

Как искать файлы из командной строки Linux

Система

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

Но как насчет командной строки? Если вам приходится часто работать в командной строке или вы администрируете GUI-less Linux-серверы, куда вы обращаетесь, когда вам нужно найти файл? К счастью, Linux имеет именно то, что вам нужно для поиска файлов, о которых идет речь, и все это уже встроено прямо в систему.

Эта команда находится в поиске. Чтобы вам было еще удобнее находится в этой середе, как только вы начнете ею пользоваться, вам необходимо начать использовать в своих скриптах Bash. Это не только удобно, но и быстро.

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

Как использовать команду

Когда я впервые увидел Linux, я не совсем понял, как работает команда find; Поэтому он никогда не работал так, как я ожидал. Но все оказалось намного проще, чем я думал. Выполните команду find FILENAME (где FILENAME — имя файла), и команда должна была найти файл и отчитаться пользователю. Мало ли я знал, что командование будет больше, чем это. Намного больше.

Если вы выполните команду man find, вы увидите синтаксис команды find:

Теперь мы увидим это в работе.

Найти по названию

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

Name — с учетом регистра

Iname – без учета регистра

Помните, Linux очень определенно относится к делу, поэтому, если вы ищете файл с именем Linux.odt, следующая команда не даст никаких результатов.

Если, однако, вы должны были изменить команду, используя опцию -iname, команда find найдет ваш файл, независимо от случая. Итак, новая команда выглядит так:

Поиск по типу

Что, если вы не заинтересованы в поиске файла по имени, а скорее будете предпочитать находить все файлы определенного типа и форматов? Некоторые из наиболее распространенных файловых дескрипторов:

  • F — обычный файл
  • D — каталог
  • L — символическая ссылка
  • C — символьные устройства
  • B — блочные устройства

Теперь предположим, что вы хотите найти все блокирующие устройства (файл, который ссылается на устройство) в вашей системе. С помощью опции -type мы можем сделать это следующим образом:

Вышеприведенная команда привела бы к довольно большому количеству результатов (большая часть из которых указывала на запрещенное разрешение), но включала бы вывод, подобный этому:

Вуаля! Блокировать устройства.

Вышеупомянутая команда просматривала всю структуру каталогов, чтобы найти все обычные файлы, заканчивающиеся на .conf. Если вы знаете, что большинство ваших файлов конфигурации размещены в / etc, вы можете указать, это вот так:

Вышеупомянутая команда отобразит все ваши .conf-файлы из / etc (Рисунок 1).

Как искать файлы из командной строки Linux

Вывод результатов в файл

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

find /etc -type f -name “*.conf” > conf_search

Теперь у вас будет файл (conf_search), который содержит все результаты команды find.

Поиск файлов по размеру

Теперь мы дойдем до того момента, когда команда find станет невероятно полезной. У меня были случаи, когда десктопы или серверы просто находили свои жесткие диски загадочно заполненными. Для того чтобы быстро освободить место (или помочь найти проблему), вы можете использовать команду find, чтобы найти файлы определенного размера. Скажем, например, вы хотите увеличить размер и найти файлы размером более 1000 МБ. Команда find может быть выдана с помощью опции -size, например:

Вы можете выполнить поиск со следующими описаниями размеров:

  • C — байт
  • K — Килобайты
  • M — мегабайт
  • G — гигабайт
  • B — 512-байтовые блоки

Продолжай учиться

Мы только поверхностно рассказали про команды find, но теперь у вас есть фундаментальное понимание того, как находить файлы на ваших Linux-системах. Убедитесь, что вы поняли команду man find, чтобы получить более глубокое и более полное представление о том, как заставить этот мощный инструмент работать на вас.

Читайте также: