Будучи пользователем 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) в имени файла. Иногда пользователи хотят найти файлы с определенным расширением. В данном руководстве представлено множество методов поиска файлов по расширениям.
Комментарии (0)