Будучи пользователем Linux, Вы можете столкнуться с ситуацией, когда Вам необходимо найти все файлы по расширению. Однако поиск файлов в Linux, особенно при одновременном поиске нескольких файлов в каталоге, содержащем множество файлов, может оказаться непростым процессом.
В этом руководстве мы рассмотрим различные методы или утилиты Linux, которые помогут Вам найти нужные файлы в каталоге с различными расширениями.
1. Поиск файлов с определенными расширениями в Linux
Команда find является полезным инструментом для поиска/нахождения файлов и каталогов в Linux, который также предоставляет возможность поиска файлов по их расширениям.
Приведем синтаксис команды find для поиска всех файлов, имеющих определенное расширение.
find . -type f -name "*.<fileExtension>"
Здесь приведен синтаксис:
-type– Этот флаг указывает тип документов для поиска, причем"f"определяет тип как “file”.-name– Предназначен для поиска файлов по их именам. В нашем случае имеются расширения, поэтому флаг-nameограничивает поиск конкретным расширением, указанным после него."*.<fileExtension>"– Флаг*представляет все файлы, имеющие определенные расширения.
Ну а теперь, когда мы рассмотрели синтаксис команды find для поиска файлов в зависимости от их расширений, давайте посмотрим несколько примеров, чтобы лучше понять ее работу.
Поиск конфигурационных файлов в Linux
Мы найдем все файлы с расширением «.conf», выполнив команду, приведенную ниже.
find . -type f -name "*.conf"
Как вы заметили, команда успешно перечислила все файлы с расширением .conf (конфигурационные файлы).
Поиск Zip-файлов в Linux
Перед этим попробуем найти все файлы с расширением .zip в каталоге “Documents”, выполнив указанную команду.
find ~/Documents -type f -name "*.zip"
Поиск нескольких файлов (расширений) в Linux
Для одновременного поиска файлов с различными расширениями можно использовать команду “find” с флагом -o. Например, приведенная ниже команда найдет все файлы с расширениями .xconf и .zip.
find ~/ \( -name "*.xconf" -o -name "*.zip" \)
2. Поиск файлов по расширениям с помощью команд Find и Grep
Теперь, когда вы поняли, как находить файлы с помощью команды find, давайте рассмотрим ее сочетание с командой grep, которая является очень полезной командой, предлагаемой Linux для поиска текстовых шаблонов в искомых файлах. Поиск файлов выполняется командой find, а затем текстовые шаблоны выявляются фильтром grep.
Синтаксис команды find с командой grep для поиска файлов по расширениям приведен ниже.
find . -type f | grep
Давайте разберемся в приведенном синтаксисе:
|– Используется для объединения двух команд, в нашем случае: find и grep. Она получает вывод от команды find, т.е. все файлы в каталоге, и передает их на вход фильтру grep, который отфильтрует файлы с определенным расширением и выведет их список.grep– Это ключевое слово для команды grep, которая фильтрует файлы с определенным расширением.<fileExtension>– Расширение файла – это тип файла, который вы должны искать.
Поиск PNG-файлов в Linux
Для поиска файлов в каталоге “Downloads” выполним указанную ниже команду, и команда grep отфильтрует файлы только с расширением .png.
find ~/Downloads -type f | grep .png
3. Поиск файлов по расширениям с помощью команд Grep и ls
Если вам уже известен каталог, в котором находятся ваши файлы, перейдите в него, а затем используйте команду ls для поиска файлов по расширениям из текущего каталога. Однако для получения желаемого результата мы можем дополнительно использовать команду grep.
ls | grep -i ".<fileExtension>"
Проанализируем представленный синтаксис:
ls– Эта команда выводит список файлов и каталогов в текущем рабочем каталоге.|– Она объединяет команду ls с командой grep, чтобы предоставить все файлы в текущем каталоге команде grep для поиска файлов по расширению.-i– Этот флаг позволяет команде grep искать определенный текстовый шаблон в файлах независимо от регистра букв.
Давайте выполним приведенную ниже команду, чтобы найти все файлы расширения “.conf” в текущем каталоге независимо от регистра букв.
ls | grep -i ".conf"
Теперь, когда вы использовали команды “find” и “ls”, давайте обсудим еще одну команду для поиска файлов по расширениям в Linux.
4. Поиск файлов по расширениям с помощью команды locate
Команда “locate” – мощная утилита, используемая для поиска файлов и каталогов в большинстве систем Linux с помощью заранее созданной базы данных имен файлов и путей, что делает ее удобной и простой в использовании.
locate "<fileName>"
В большинстве систем Linux он поставляется предустановленным, однако если у вас его нет, вы можете установить его с помощью менеджера пакетов, как показано на рисунке.
sudo apt install mlocate [On Debian, Ubuntu and Mint] sudo yum install mlocate [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo emerge -a sys-apps/mlocate [On Gentoo Linux] sudo apk add mlocate [On Alpine Linux] sudo pacman -S mlocate [On Arch Linux] sudo zypper install mlocate [On OpenSUSE]
После установки выполните следующую команду для обновления базы данных файлов, используемой командой locate в вашей системе.
sudo updatedb
После завершения процесса updatedb вы можете использовать команду locate для быстрого поиска файлов и каталогов в вашей системе на основе их имен или расширений, как показано на рисунке.
locate ".xconf"
5. Поиск файлов по расширениям с помощью средств графического интерфейса
После того как мы рассмотрели все команды командной строки, давайте рассмотрим метод поиска файлов с помощью графического интерфейса. Некоторые предпочитают использовать графический интерфейс, а не команды CLI.
Чтобы найти файлы с нужными расширениями в любом файле, выполните следующие действия:
- Откройте File Manager.
- Перейдите в любую директорию, в которой вы хотите найти файлы.
- Активируйте строку поиска и введите нужное расширение, например .zip, как показано на рисунке.
Мы успешно нашли все файлы с расширением .zip.
6. Как найти файлы по типу
Если вы хотите найти и отфильтровать файлы по их типу, вам нужно использовать опцию “-type”.
Вы можете использовать следующие типы:
- “f” для обычных файлов
- “d” для каталогов
- “b” для устройств блокировки
- “l” для символических ссылок (симлинков)
- “c” для character устройств
Например, если вы хотите найти все симлинки в каталоге /var, вы можете использовать эту команду:
find /var -type l
7. Как объединить несколько параметров и критериев в команде find
Вы можете объединить параметры в одну команду. Например, если вы хотите найти все симлинки, содержащие слово “example”, вы можете использовать:
find /var -type l -iname "*example*"
По умолчанию при объединении опций они объединяются операндом “-and”, что означает, что оба критерия должны быть истинными. Вы можете использовать операнд “-or”, чтобы получить результаты, которые возвращают любой из вариантов. Например:
find -type -d -or -iname "example"
Эта команда выведет все каталоги И все файлы с именем “example”. Если бы вы не использовали опцию “-or”, то получили бы все каталоги с именем “example”.
8. Как найти файлы по размеру
Еще одна полезная опция, которую можно использовать в команде find, – это опция “-size”. Вы можете отфильтровать найденные файлы по размеру.
Фильтры по размеру, которые вы можете использовать:
- “k” для кибибайтов (KiB, единицы измерения 1024 байта)
- “M” для мегабайтов (MiB, единицы измерения 1024 * 1024 = 1048576байт)
- “G” для гигабайтов (GiB, единицы 1024 * 1024 * 1024 =1073741824 байт)
- “b” для 512-байтных блоков (это значение по умолчанию, если используется nosuffix)
- “c” для байтов
- “w” для двухбайтных слов
Так, например, чтобы найти все файлы размером более 1 ГБ в каталоге /home, можно использовать следующую команду:
find /home -size +1G
Если вы хотите найти файлы, размер которых меньше 1 ГБ, вы можете использовать:
find /home -size -1G
А чтобы найти все файлы размером ровно 1 ГБ, вы можете использовать:
find /home -size 1G
9. Как найти файлы по времени
С помощью команды find можно находить и фильтровать файлы по времени. Более конкретно, вы можете использовать следующие опции:
- “-atime” – найти файлы по времени их последнего чтения или записи (Access Time)
- “-mtime” – найти файлы по времени их последнего изменения (Modification Time)
- “-ctime” – найти файлы по времени последнего изменения метаданных инода файла (Change Time)
По умолчанию параметры, используемые этими опциями, – дни. Например, чтобы найти файлы в каталоге /var, которые были изменены в течение последних 2 дней, можно использовать следующую команду:
find /var -mtime 2
По аналогии с опцией size, можно использовать операнды плюс и минус. Например, чтобы найти файлы, которые были изменены менее 2 дней назад, вы можете использовать:
find /var -mtime -2
Чтобы найти файлы, которые были изменены более 2 дней назад, вы можете использовать:
find /var -mtime +2
Вы также можете использовать минуты вместо дней. Для этого нужно использовать опцию “-mmin”. Например, чтобы найти все файлы в каталоге /var, которые были изменены в течение последних 5 минут, вы можете использовать:
find /var -mmin 5
10. Как найти файлы на основе разрешений
Чтобы найти файлы с определенными разрешениями, можно использовать параметр “-perm”. Например, чтобы найти все файлы с правами “777” в каталоге /var, можно использовать следующую команду:
find /var -perm 777
Чтобы найти все файлы в каталоге /var/ с правами не менее 644, выполните следующую команду:
find /var -perm -644
Это вернет файлы с правами выше 644, например 744, 777 и т. д.
11. Запуск команд для файлов, которые находит команда find
Если вы хотите запустить (выполнить) команды для файлов, которые находит команда find, вы можете использовать опцию “-execute”, например:
find [CRITERIA] -exec [COMMAND] {} \;
В данном случае [CRITERIA] – это то, что вы используете в команде find, как мы показывали в предыдущих примерах. [КОМАНДА] – это команда, которую вы хотите выполнить для файлов, найденных командой find. Обязательно включите {} (это место для результатов команды find) и “\;” (это конец команды)
Примером, объединяющим предыдущие примеры, может быть поиск всех файлов в каталоге /var с правами 777 и обновление их разрешений до 744:
find /var -perm 777 -exec chmod 744 {} \;
12. Другие полезные опции, которые можно использовать в команде find
Мы не будем подробно останавливаться на них, но вы можете легко найти дополнительную информацию о них на странице man или просто в google.
- “-maxdepth” задает максимальный уровень каталогов, в которых команда find будет искать файлы. Так что если у вас есть несколько подкаталогов, вы можете ограничить команду find, например, двумя подкаталогами.
- “-delete” удаляет файлы, которые находит команда find. Вы можете добавить “-delete” в конец команды find, и она удалит все файлы, которые найдет.
- “-O3” устанавливает уровень оптимизации на 3 – это сделает поиск самым быстрым. По умолчанию используется уровень “-O1”
- “-user” и “-group” используются для фильтрации файлов на основе владения
- “-empty” находит пустые файлы
- “-read” находит читаемые файлы
Теперь, когда вы узнали о команде find, давайте перейдем к команде locate, которая является относительно более быстрой командой, чем find.
Заключение
Расширения файлов – это суффикс, который появляется после . (dot) в имени файла. Иногда пользователи хотят найти файлы с определенным расширением. В данном руководстве представлено множество методов поиска файлов по расширениям.
Комментарии (2)