Linux terminal search file

Команда find в Linux – мощный инструмент сисадмина

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

Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:

  • Дате добавления.
  • Содержимому.
  • Регулярным выражениям.

Данная команда будет очень полезна системным администраторам для:

  • Управления дисковым пространством.
  • Бэкапа.
  • Различных операций с файлами.

Команда find в Linux производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.

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

  • directory-to-search (каталог поиска) – это отправной каталог, с которой find начинает поиск файлов по всем подкаталогам, которые находятся внутри. Если не указать путь, тогда поиск начнется в текущем каталоге;
  • criteria (критерий) – критерий, по которым нужно искать файлы;
  • action (действие) – что делать с каждым найденным файлом, соответствующим критериям.

Поиск по имени

Следующая команда ищет файл s.txt в текущем каталоге:

  • . (точка) – файл относится к нынешнему каталогу
  • -name – критерии по которым осуществляется поиск. В данном случае поиск по названию файла.

В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.

Для поиска всех изображений c расширением .png нужно использовать шаблон подстановки *.png:

Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:

Если выдает слишком много ошибок в отказе разрешения, тогда можно добавить в конец команды – 2> /dev/null. Таким образом сообщения об ошибках будут перенаправляться по пути dev/null, что обеспечит более чистую выдачу.

Поиск по типу файла

Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:

  • f – простые файлы;
  • d – каталоги;
  • l – символические ссылки;
  • b – блочные устройства (dev);
  • c – символьные устройства (dev);
  • p – именованные каналы;
  • s – сокеты;

Например, указав критерий -type d будут перечислены только каталоги:

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

Допустим, что вам необходимо найти все большие файлы. Для таких ситуаций подойдет критерий -size.

  • «+» — Поиск файлов больше заданного размера
  • «-» — Поиск файлов меньше заданного размера
  • Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.

В данном случае поиск выведет все файлы более 1 Гб (+1G).

Единицы измерения файлов:

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

Критерий -empty позволяет найти пустые файлы и каталоги.

Поиск времени изменения

Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:

Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).

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

Поиск по времени доступа

Критерий -atime позволяет искать файлы по времени последнего доступа.

Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).

Читайте также:  Dual boot ubuntu and linux

Поиск по имени пользователя

Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:

Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.

Поиск по набору разрешений

Критерий -perm – ищет файлы по определенному набору разрешений.

Поиск файлов с разрешениями 777.

Операторы

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

Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:

Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.

Перед скобками нужно поставить обратный слеш «\».

Действия

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

  • -delete — Удаляет соответствующие результатам поиска файлы
  • -ls — Вывод более подробных результатов поиска с:
    • Размерами файлов.
    • Количеством inode.
  • -print Стоит по умолчанию, если не указать другое действие. Показывает полный путь к найденным файлам.
  • -exec Выполняет указанную команду в каждой строке результатов поиска.

-delete

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

Перед удалением лучше лишний раз себя подстраховать. Для этого можно запустить команду с действием по умолчанию -print.

Данное действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска.

  • command – это команда, которую вы желаете выполнить для результатов поиска. Например:
    • rm
    • mv
    • cp
  • <> – является результатами поиска.
  • \; — Команда заканчивается точкой с запятой после обратного слеша.

С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:

Другой пример использования действия -exec:

Таким образом можно скопировать все .jpg изображения в каталог backups/fotos

Заключение

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

  • Файлов по имени.
  • Дате последнего доступа.
  • Дате последнего изменения.
  • Имени пользователя (владельца файла).
  • Имени группы.
  • Размеру.
  • Разрешению.
  • Другим критериям.

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

  • Удаление.
  • Копирование.
  • Перемещение в другой каталог.

Команда find может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.

Источник

How to Find Files in Linux Terminal

Linux, regardless of the distro you use, comes with a number of GUI tools which allow searching for files. Many modern file managers support file searching right in the file list. However, there are a number of situations when you need to use the console, for example, during an SSH session or when the X server doesn’t start. Here is how you can find files quickly using the terminal.

Also, there’s Catfish, a popular search tool with a search index, which can find your files really quickly.

I would like to share the methods I use myself when I work in terminal.
The first method involves the find utility, which exists in any distro, even in embedded systems built on busybox. The other method is the locate command.

To find files in Linux terminal, do the following.

  1. Open your favorite terminal app. XFCE4 terminal is my personal preference.
  2. Type the following command:

The arguments above are as follows:
/path/to/folder/ — the folder where to begin searching. If not specified, the search will be started in the current directory.
Switches I use:
-iname — search for files and folders which contain the specified portion in the name and ignore text case.

Here is the command I can use to find my articles I have written about the Opera browser:

  • If you need to find only files or only folders, add the option -type f for files or —type d for directories. Here are a few examples:
  • To find recently modified files and directories, you can use the following options of the find command:
    -mmin n — find files which were modified n minutes ago.-mtime n — find files which were modified n*24 hours ago. When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -mtime +1, a file must have been modified at least two days ago.
  • It is possible to execute a command for files found by your search query. See the following example:

    Here, we use the -exec option to run the vim text editor for all files in the search results. The «<> » portion stands for files found by the find command. The «\;» ending specifies the end of the command for the -exec option.

    Источник

    Поиск в Linux с помощью команды find

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

    Общий синтаксис

    путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

    набор правил, по которым выполнять поиск.

    * по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

    Описание опций

    Тип объекта поиска. Возможные варианты:

    • f — файл;
    • d — каталог;
    • l — ссылка;
    • p — pipe;
    • s — сокет.
    Опция Описание
    -name Поиск по имени.
    -iname Регистронезависимый поиск по имени.
    -type
    -size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
    -mtime Время изменения файла. Указывается в днях.
    -mmin Время изменения в минутах.
    -atime Время последнего обращения к объекту в днях.
    -amin Время последнего обращения в минутах.
    -ctime Последнее изменение владельца или прав на объект в днях.
    -cmin Последнее изменение владельца или прав в минутах.
    -user Поиск по владельцу.
    -group По группе.
    -perm С определенными правами доступа.
    -depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
    -maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
    -prune Исключение перечисленных каталогов.
    -mount Не переходить в другие файловые системы.
    -regex По имени с регулярным выражением.
    -regextype Тип регулярного выражения.
    -L или -follow Показывает содержимое символьных ссылок (симлинк).
    -empty Искать пустые каталоги.
    -delete Удалить найденное.
    -ls Вывод как ls -dgils
    -print Показать найденное.
    -print0 Путь к найденным объектам.
    -exec <> \; Выполнить команду над найденным.
    -ok Выдать запрос перед выполнением -exec.

    Также доступны логические операторы:

    Оператор Описание
    -a Логическое И. Объединяем несколько критериев поиска.
    -o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
    -not или ! Логическое НЕ. Инвертирует критерий поиска.

    Полный набор актуальных опций можно получить командой man find.

    Примеры использования find

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

    1. Простой поиск по имени:

    find / -name «file.txt»

    * в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

    2. Поиск файла по части имени:

    * данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

    3. Несколько условий.

    а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

    find . -name «sess_*» -a -name «*cd»

    б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

    find . -name «sess_*» -o -name «*cd»

    в) Более компактный вид имеют регулярные выражения, например:

    find . -regex ‘.*/\(sess_.*cd\)’

    * где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

    4. Найти все файлы, кроме .log:

    find . ! -name «*.log»

    * в данном примере мы воспользовались логическим оператором !.

    Поиск по дате

    1. Поиск файлов, которые менялись определенное количество дней назад:

    find . -type f -mtime +60

    * данная команда найдет файлы, которые менялись более 60 дней назад.

    2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

    а) дате изменения:

    find . -type f -newermt «2019-11-02 00:00»

    * покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

    find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

    * найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

    б) дате обращения:

    find . -type f -newerat 2019-10-08

    * все файлы, к которым обращались с 08.10.2019.

    find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

    * все файлы, к которым обращались в октябре.

    в) дате создания:

    find . -type f -newerct 2019-09-07

    * все файлы, созданные с 07 сентября 2019 года.

    find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

    * файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

    По типу

    Искать в текущей директории и всех ее подпапках только файлы:

    * f — искать только файлы.

    Поиск по правам доступа

    1. Ищем все справами на чтение и запись:

    find / -perm 0666

    2. Находим файлы, доступ к которым имеет только владелец:

    find / -perm 0600

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

    find / -type f -exec grep -i -H «content» <> \;

    * в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

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

    find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

    * команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

    Лимит на количество выводимых результатов

    Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

    find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

    Поиск с действием (exec)

    1. Найти только файлы, которые начинаются на sess_ и удалить их:

    find . -name «sess_*» -type f -print -exec rm <> \;

    * -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

    2. Переименовать найденные файлы:

    find . -name «sess_*» -type f -exec mv <> new_name \;

    find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name

    3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

    find . -name «*.tmp» | wc -l

    4. Изменить права:

    find /home/user/* -type d -exec chmod 2700 <> \;

    * в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

    5. Передать найденные файлы конвееру (pipe):

    find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’

    * в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

    6. Произвести замену в файлах с помощью команды sed:

    find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;

    * находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

    Чистка по расписанию

    Команду find удобно использовать для автоматического удаления устаревших файлов.

    Открываем на редактирование задания cron:

    0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

    * в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
    * полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

    Источник

    Читайте также:  Как узнать активирована ли windows 10 20h2
  • Оцените статью