Меню

Linux как найти файл по имени

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

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

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

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

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

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

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

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

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
-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

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

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

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

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

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

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

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

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

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

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

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

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

Поиск по дате

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

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

find . -mmin -20 -mmin +10 -type f

* найти все файлы, которые менялись более 10 минут, но не более 20-и.

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

По типу

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

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

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

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

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

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. Переместить найденные файлы:

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

* в данном примере мы переместим все найденные файлы в каталог /new/path/.

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

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

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

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

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

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

7. Произвести замену в файлах с помощью команды 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 системах он может располагаться в разных местах.

Источник статьи: http://www.dmosk.ru/miniinstruktions.php?mini=search-linux

Команда find в Linux

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

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

Основная информация о Find

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

Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.

Команда find имеет такой синтаксис:

find [ папка] [ параметры] критерий шаблон [действие]

Папка — каталог в котором будем искать

Параметры — дополнительные параметры, например, глубина поиска, и т д

Критерий — по какому критерию будем искать: имя, дата создания, права, владелец и т д.

Шаблон — непосредственно значение по которому будем отбирать файлы.

Основные параметры команды find

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

  • -P — никогда не открывать символические ссылки.
  • -L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth — искать сначала в текущем каталоге, а потом в подкаталогах.
  • -mount искать файлы только в этой файловой системе.
  • -version — показать версию утилиты find.
  • -print — выводить полные имена файлов.
  • -type f — искать только файлы.
  • -type d — поиск папки в Linux.

Критерии

Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.

  • -name — поиск файлов по имени.
  • -perm — поиск файлов в Linux по режиму доступа.
  • -user — поиск файлов по владельцу.
  • -group — поиск по группе.
  • -mtime — поиск по времени модификации файла.
  • -atime — поиск файлов по дате последнего чтения.
  • -nogroup — поиск файлов, не принадлежащих ни одной группе.
  • -nouser — поиск файлов без владельцев.
  • -newer — найти файлы новее чем указанный.
  • -size — поиск файлов в Linux по их размеру.

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

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

1. Поиск всех файлов

Показать все файлы в текущей директории:

Все три команды покажут одинаковый результат. Точка здесь означает текущую папку. В место неё можно указать любую другую.

2. Поиск файлов в определенной папке

Показать все файлы в указанной директории:

Искать файлы по имени в текущей папке:

Поиск по имени в текущей папке:

Не учитывать регистр при поиске по имени:

3. Ограничение глубины поиска

Поиска файлов по имени в Linux только в этой папке:

find . -maxdepth 1 -name «*.php»

4. Инвертирование шаблона

Найти файлы, которые не соответствуют шаблону:

5. Несколько критериев

Поиск командой find в Linux по нескольким критериям, с оператором исключения:

find . -name «test» -not -name «*.php»

Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:

find -name «*.html» -o -name «*.php»

Эта команда найдёт как php, так и html файлы.

6. Тип файла

По умолчанию find ищет как каталоги, так и файлы. Если вам необходимо найти только каталоги используйте критерий type с параметром d. Например:

find . -type d -name «Загрузки»

Для поиска только файлов необходимо использовать параметр f:

find . -type f -name «Загрузки»

6. Несколько каталогов

Искать в двух каталогах одновременно:

find ./test ./test2 -type f -name «*.c»

7. Поиск скрытых файлов

Найти скрытые файлы только в текущей папке. Имена скрытых файлов в Linux начинаются с точки:

find . -maxdepth 1 -type f -name «.*»

8. Поиск по разрешениям

Найти файлы с определенной маской прав, например, 0664:

Права также можно задавать буквами для u (user) g (group) и o (other). Например, для того чтобы найти все файлы с установленным флагом Suid в каталоге /usr выполните:

sudo find /usr -type f -perm /u=s

Поиск файлов доступных владельцу только для чтения только в каталоге /etc:

find /etc -maxdepth 1 -perm /u=r

Найти только исполняемые файлы:

find /bin -maxdepth 2 -perm /a=x

9. Поиск файлов в группах и пользователях

Найти все файлы, принадлежащие пользователю:

Поиск файлов в Linux принадлежащих группе:

find /var/www -group www-data

10. Поиск по дате модификации

Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

Поиск файлов в Linux открытых N дней назад:

Найти все файлы, модифицированные между 50 и 100 дней назад:

Найти файлы измененные в течении часа:

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

Найти все файлы размером 50 мегабайт:

От пятидесяти до ста мегабайт:

Найти самые маленькие файлы:

find . -type f -exec ls -s <> \; | sort -n -r | head -5

find . -type f -exec ls -s <> \; | sort -n | head -5

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

13. Действия с найденными файлами

Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, для того чтобы найти все пустые папки и файлы, а затем выполнить ls для получения подробной информации о каждом файле используйте:

Удалить все текстовые файлы в tmp

find /tmp -type f -name «*.txt» -exec rm -f <> \;

Удалить все файлы больше 100 мегабайт:

find /home/bob/dir -type f -name *.log -size +100M -exec rm -f <> \;

Выводы

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

Источник статьи: http://losst.pro/komanda-find-v-linux

Команда 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 дней).

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

Опция –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 может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.

Источник статьи: http://habr.com/ru/company/alexhost/blog/525394/

Linux как найти файл по имени

Используйте утилиту find для поиска файлов в дереве каталогов по имени файла. Укажите имя дерева каталогов для поиска, а затем, с помощью опции `-name’ — имя нужного Вам файла.

Чтобы увидеть список всех файлов системы, которые называются `top’, наберите:

Эта команда проведет поиск во всех каталогах, куда Вам разрешен доступ; если Вы не имеете прав прочесть содержимое каталога, find сообщить, что поиск в данном каталоге Вам запрещен.

Опция `-name’ различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией `-iname’.

Чтобы увидеть список всех файлов системы, которые называются `top’, без учета регистра символов, наберите:

Эта команда найдет все файлы, название которых состоит из букв `top’ — включая `Top’, `top’, и `TOP’.

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

Чтобы получить список файлов системы, имена которых начинаются с букв `top’, введите:

Чтобы получить список файлов системы, имена которых начинаются с букв `top’, за которыми следуют еще три символа, введите:

Чтобы получить список файлов системы, имена которых начинаются с букв `top’, за которыми следуют пять и более символов, введите:

Чтобы увидеть все файлы с расширением `.tex’в Вашем рабочем каталоге, независимо от их написания, введите:

Чтобы увидеть все файлы в каталоге `/usr/share’, содержащие в имени слово `farm’, введите:

$ find /usr/share -name ‘*farm*’ [Enter]

Используйте `-regex’ вместо `-name’ для поиска файлов, имена которых удовлетворяют регулярному выражению, или образцу, описывающему несколько строк.

Чтобы увидеть все файлы в текущем каталоге, имена которых содержат строку `net’ или `comm’, наберите:

Примечание: Опция `-regex’ совпадает с полным именем файла относительно указанного каталога, а не с отдельным именем файла.

Чтобы найти файлы определенного размера, используйте опцию `-size’, указав после нее требуемый размер файла. Размер файла может быть задан в трех различных формах: если перед ним указан знак плюс (`+’), ищутся все файлы, большие, чем указанный размер; если указан знак минус (`-‘), ищутся все файлы, меньшие, чем указанный размер; если префикс не указан, ищутся файлы точно указанного размера. (Единица измерения — блок 512 байт; символ `k’ после размера указывает килобайты, символ `b’ — байты.)

Чтобы вывести список файлов в каталоге `/usr/local’, размер которых больше 10,000 килобайт, введите:

$ find /usr/local -size +10000k [Enter]

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

Чтобы вывести список файлов системы, размер которых составляет 42 блока по 512 байт, наберите:

Используйте опцию `-empty’ для поиска пустых файлов — т.е. файлов с размером 0 байт. Это полезно для поиска и удаления ненужных файлов.

Чтобы найти все пустые файлы в Вашем домашнем каталоге, введите:

Чтобы найти файлы, модифицированные в определенное время, используйте команду find с опциями `-mtime’ или `-mmin’; аргумент опции `-mtime’ определяет количество прошедших суток (24 часа), а аргумент `-mmin’ — количество прошедших минут.

Чтобы вывести все файлы в каталоге `/usr/local’, модифицированные точно 24 часа назад, введите:

$ find /usr/local -mtime 1 [Enter]

Чтобы вывести все файлы в каталоге `/usr’, модифицированные 5 минут назад, введите:

Если Вы хотите указать промежуток времени, поставьте перед числом либо знак плюс (`+’), определяя большее или равное аргументу время, или знак минус (`-‘), определяя время, меньшее или равное аргументу.

Чтобы вывести все файлы в каталоге `/usr/local’, модифицированные в течение последних 24 часов, введите:

$ find /usr/local -mtime -1 [Enter]

Опция `-daystart’ определяет отсчет времени с момента начала текущих суток.

Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные вчера, введите:

Чтобы вывести все файлы в каталоге `/usr’, модифицированные в течение года, введите:

$ find /usr -mtime +356 -daystart [Enter]

Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные в период от 2 до 4 дней тому назад, наберите:

-mtime 2 -mtime -4 -daystart [Enter]

Чтобы найти файлы, которые новее некоторого файла, введите его имя в качестве аргумента опции `-newer’.

Чтобы вывести все файлы в каталоге `/etc’, которые новее файла `/etc/motd’, введите:

$ find /etc -newer /etc/motd [Enter]

Чтобы найти все файлы новее определенной даты, используйте следующий трюк: создайте временный файл в каталоге `/tmp’ и установите дату его модификации на требуемую с помощью touch, а затем поределите его как аргумент для `-newer’.

Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные после 4 мая текущего года, введите:

Чтобы найти файлы, принадлежащие определенному пользователю, укажите имя пользователя в качестве агрумента опции `-user’. Например, для поиска всех файлов в каталоге `/usr/local/fonts’, принадлежащих пользователю warwick, наберите:

$ find /usr/local/fonts -user warwick [Enter]

Опция `-group’ подобным образом определяет файлы, принадлежащие некоторой группе пользователей.

Чтобы вывести список файлов в каталоге `/dev’, принадлежащих группе audio, введите:

$ find /dev -group audio [Enter]

Вы можете использовать команду find для выполнения других команд над найденными файлами, указав требуемые команды в качестве аргуентов опции `-exec’. Если Вы используететв команде строку `»’, эта строка в команде будет заменена именем текущего найденного файла. Окончание команды помечается строкой `’;».

Чтобы найти все файлы в каталоге ` /html/’ с расширением `.html’, и вывести строки из этих файлов, содержащие слово `organic’, введите:

/html/ -name ‘*.html’ -exec grep organic ‘<>‘ ‘;’ [Enter]

Чтобы ввести подтверждение выполнения команды для файла, найденного find, используйте ключ `-ok’ вместо `-exec’.

Чтобы удалить из Вашего домашнего каталога файлы, доступ к которым осуществлялся более года назад, с подтверждением для каждого файла, введите:

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

Чтобы вывести список файлов в Вашем домашнем каталоге, имена которых начинаются со строки `top’, и которые новее файла `/etc/motd’, введите:

-name ‘top*’ -newer /etc/motd [Enter]

Чтобы сжать все файлы в Вашем домашнем каталоге, размер которых превышает 2 Mb, и которые еще не сжаты с помощью gzip (не имеют расширения `.gz’), введите:

-size +2000000c -regex ‘.*[^gz]’ -exec gzip ‘<>‘ ‘;’ [Enter]

Чтобы найти наибольший файл в каталоге, используйте команду ls с опцией `-S’, которая сортирует файлы в нисходящем порядке по размеру (обычно ls выводит список файлов по алфавиту). Добавьте опцию `-l’, чтобы вывести размер и другие атрибуты файла.Пример:

Чтобы вывести оглавление каталога, начав с файлов наименьшего размера, используйте ls с ключами `-S’ и `-r’, которые сортируют вывод в обратном порядке.Пример:

Чтобы вывести список каталогов, отсортированных по размеру — то есть размеру всех содержащихся в них файлов — используйте du и sort. Команда du выводит список каталогов в восходящем порядке, начиная с самого маленького; опция `-S’ помещает при выводе в первую колонку размер каталога в килобайтах. Укажите требуемое дерево каталогов в качестве аргумента du и перенаправьте вывод в команду sort с ключом `-n’, которая отсортирует список по числам.

Чтобы вывести список подкаталогов в текущем дереве каталогов, отсортированный по размеру, введите:

Если Вам нужно, чтобы первыми были указаны самые большие каталоги, используйте ключ `-r’:

Чтобы быстро определить количество файлов в каталоге, используйте ls и перенаправьте вывод в команду `wc -l’, которая выволит количество строк, пришедших на ее вход.

Для вывода общего количества файлов в текущем каталоге введите:

Общее количество файлов — 19.

Поскольку ls по умолчанию не показывает скрытые файлы, приведенная выше команда не будет их учитывать. Опция `-A’ для ls позволит посчитать обычные и скрытые файлы:

Чтобы посчитать количество файлов во всем дереве каталогов, а не только в отдельном каталоге, используйте find вместо ls, и укажите специальный ключ для find — строку `
! -type d’, чтобы исключить вывод и подсчет каталогов.

Чтобы вывести количество файлов в дереве `/usr/share’, введите:

$ find /usr/share \! -type d wc -l [Enter]|

Чтобы вывести количество файлов и каталогов в дереве `/usr/share’, введите:

Чтобы вывести количество каталогов в дереве `/usr/share’, введите:

$ find /usr/share \! -type f wc -l [Enter]|

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

Чтобы определить, установлен ли в Вашей системе perl и где он расположен, введите:

Источник статьи: http://www.opennet.ru/docs/RUS/linux_base/node149.html

15 супер полезных примеров команды find в Linux

Практические примеры, которые приведены в этой статье, помогут вам освоить очень эффективную и крайне полезную команду find.

Она используется для поиска файлов и папок через командную строку Linux.

Команда find — одна из самых мощных и широко применимых команд. При этом она крайне объёмная и насчитывает более 50 опций, в которых легко запутаться, особенно в сочетании с командами exec или xargs.

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

Для этого разберём самые распространённые случаи практического применения команды find. Но для начала покажу вам синтаксис и принцип работы с командой.

Команда find в Linux

Общий синтаксис команды find выглядит так:

Всё, что в квадратных скобках, указывать необязательно. А значит, выполнить команду find можно вообще без опций и параметров. Она выдаст список всех файлов и папок в текущем расположении. Мало полезного, да?

Так что давайте взглянем на параметры подробнее:

  • directory to search (папка поиска) — это расположение, с которого вы хотите начать поиск. Поиск по умолчанию рекурсивный и начинается с текущего расположения.
  • options (опции) содержит указание типа поиска: по имени, типу файла, времени изменения и так далее — тут может быть более 50 вариантов.
  • expression (выражение) содержит поисковый запрос. Если вы ищете файл по имени, параметр expression должен содержать имя файла. Если ищете файлы с именем, соответствующим заданному шаблону, поисковое выражение — это шаблон.

Приведу простой пример:

Такая команда выполнит поиск файла (именно файла, не папки) с именем myfile в текущей папке и подпапках. Опция -type f сужает поиск до файлов. Точка ( . ) указывает на текущую папку.

Рассмотрим несколько примеров применения команды find.

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

Так выполняется поиск файлов и папок по имени:

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

Пример ниже — поиск файлов и папок с именем «mystuff»:

Поиск только файлов или только папок

Если нужно искать только файлы, на помощь придёт опция type -f:

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

Если нужно найти папку, укажите тип type -d:

Вот пример нашего поиска уже по папкам:

Поиск без учёта регистра

Команда find по умолчанию учитывает регистр. Чтобы выполнить поиск по имени файла без учёта регистра, надо ввести опцию -iname вместо -name .

С поиском по папкам ( type -d ) это тоже работает.

Скриншот последних трёх примеров:

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

Одно из самых популярных применений команды find — поиск файлов определённого типа, то есть по заданному расширению.

Скажем, вы хотите найти все файлы С++ в текущих папках. Файлы С++ имеют расширение .cpp, и вот как их можно найти:

С такими опциями команда find найдёт только файлы ( -type f ) с именами, оканчивающимися на .cpp .

При работе с командой find всегда заключайте поисковое выражение в двойные кавычки.

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

Вот что будет, если ввести запрос без кавычек:

Оболочка распознает подстановочный знак * и заменит его всеми файлами в текущей папке, чьи имена заканчиваются на .cpp.

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

В нашем случае файл .cpp всего один, и после подстановки команда выглядит так: find . -type f -name file.cpp . Она работает, поскольку file.cpp — корректный поисковый запрос.

А вот файлов .txt в той же папке два, и когда команда расширяется до find . -type f -name another.txt new.txt , выводится предупреждение, потому что поисковых запросов больше одного.

Именно поэтому сам поисковый запрос всегда следует заключать в двойные кавычки.

Поиск нескольких файлов с несколькими расширениями (или условием)

Команда, рассмотренная выше, нужна для поиска файлов по расширению. А что если нужно найти файлы с несколькими разными расширениями?

Вместо того чтобы прогонять команду find несколько раз, введите её один раз с опцией -o, которая работает как логическое условие «или»:

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

Все приведённые примеры иллюстрируют поиск в текущей папке, потому что команда включает в себя точку ( . ).

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

Поиск файлов в нескольких папках

Если нужные вам файлы могут находиться в нескольких папках, можно выполнить поиск во всех этих расположениях за один раз. Просто укажите все пути к папкам при введении команды find:

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

Опция -empty позволяет использовать команду find для поиска пустых файлов и папок.

Найти таковые в текущей папке можно следующим образом:

Можно указать тип объектов, чтобы искать только файлы или только папки:

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

Поиск крупных и мелких файлов (поиск по размеру файла)

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

Используется опция -size с аргументом +N для файлов размером более N и -N для файлов размером менее N.

А вот как можно найти файлы точного заданного размера (50 КБ):

Так выполняется поиск файлов размером более 1 ГБ в текущей папке:

А так — файлов, не превышающих 20 байт:

Для поиска файлов размером более 100 МБ, но менее 2ГБ, введите:

Поиск по размеру тоже можно сочетать с поиском по имени файла. Таким образом, найти в корневом каталоге все файлы размером более 500 МБ с именем, оканчивающимся на .log, можно так:

  • c – байты
  • k – килобайты
  • M – мегабайты
  • G – гигабайты

Поиск недавно изменённых файлов (поиск по времени изменения или создания)

  • Mtime – время последнего изменения файла
  • Ctime – время создания файла
  • Atime – время последнего доступа к файлу

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

Найти все файлы, претерпевшие изменения за последние трое суток (3*24ч), можно так:

А все файлы, созданные пять и более дней назад, ищутся так:

Понимаю, что 24 часа — большой срок. Что если нужно выявить файлы, изменённые всего пару минут назад? Для этого предусмотрены опции mmin , amin и cmin .

Так выглядит команда поиска всех файлов, изменённых за последние пять минут:

Можно не только указать имя файла, но и ограничить временной промежуток с двух сторон. Команда ниже выполнит поиск всех файлов .java, изменённых не ранее 30 и не позднее 20 минут назад.

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

Надеюсь, вы имеете представление о разрешениях файлов в Linux.

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

Поищем в текущей папке, к примеру, все файлы с режимом доступа 777:

А так можно найти все файлы с правами на чтение и запись для всех типов пользователей (только точное совпадение; файлы с правами на выполнение для всех не отобразятся):

Поиск файлов по владельцу

Можно также найти файлы, принадлежащие определённому пользователю.

Вот как обнаружить в текущей папке все файлы пользователя Джона:

Эта опция сочетается с другими, будь то размер или время и имя файла:

Отключение рекурсивного поиска для поиска только в текущей папке

По умолчанию команда find выполняет поиск во всех подпапках текущего расположения. Если это не требуется, можно ограничить глубину поиска значением «1». Так вы ограничитесь поиском в текущей папке, не залезая в подпапки.

Исключение папки из поиска

Если нет необходимости производить поиск в той или иной папке, можно исключить её с помощью опций path, prune и логического «или».

Будьте внимательны: путь к папке должен оканчиваться на *, затем идёт -prune и только потом -o .

Попросту говоря, при поиске с опцией prune папка, указанная с помощью path, игнорируется. Prune всегда сопровождается флагом -o (логическое «или»), чтобы папки, которые не были исключены, просматривались на наличие искомого объекта.

Дальнейшая работа с результатами команды find: exec и xargs

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

Например, как найти файлы с именем, соответствующим определённому шаблону, и переименовать их за одно действие? Или выявить и удалить пустые файлы?

Вам уже известно, что в Linux можно использовать перенаправление ввода-вывода, чтобы объединить результаты одной команды с вводом другой. Но с результатами команды find это не сработает — по крайней мере, не напрямую.

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

Использование find и exec

Допустим, вам нужен подробный список (ls -l) файлов, найденных командой find. Вот как его получить:

Многие забывают ввести <> + в конце команды exec. Но это необходимо — как и пробел между скобками <> и плюсом +.

Фигурные скобки ссылаются на результат выполнения команды find. Их содержимое может иметь следующий вид: <файл 1, файл 2, файл 3>. Символ + используется как конец команды exec.

Есть ещё один вариант оформления exec:

В данном случае плюс заменён на точку с запятой. Дополнительная косая черта означает, что точка с запятой не является специальным символом.

Преимущество сочетания <> + заключается в меньшем количестве команд ( ls -l file1 file2 file3 ), тогда как комбинация <> \; запустит цепочку ls -l file1 , ls -l file2 и так далее.

Однако сочетание <> \; даёт возможность использовать <> несколько раз в одном и том же выражении exec. Так, приведённая ниже команда переименует все обнаруженные файлы с расширением .old.

Использование команды xargs

Многие пользователи Linux сталкиваются с необходимостью перенаправления ввода-вывода довольно часто. Но команда exec с цепочкой символов <> + кажется им слишком сложной.

И тут на помощь приходит xargs. Нужно просто перенаправить вывод команды find в команду xargs через конвейер.

Синтаксис куда проще, верно? К тому же команда xargs тоже весьма эффективна. Подробнее о ней — в статье по ссылке.

Сочетание команд find и grep

Теперь вы умеете совмещать команду find с xargs и exec, и пора перейти на следующий уровень — объединить find и grep.

Для сисадминов и разработчиков комбинация команд find и grep — одна из самых распространённых и вместе с тем самых полезных.

Команда find находит файлы с именем, соответствующим шаблону, а затем команда grep выполняет поиск по их содержимому.

Например, вам нужно найти все файлы .txt, в которых есть имя «Alice». Объединить команды find и grep можно так:

Конечно, пример элементарный, но если команда grep вам знакома, можете использовать её на своё усмотрение.

И это далеко не все возможности команды find.

Перечислить все опции и примеры использования команды find практически невозможно. Её возможностям нет границ, но если вы освоите её принципы, она окажется очень кстати во многих ситуациях. Решающий фактор — как сочетается логика действия разных опций и команд.

Надеюсь, моя подборка примеров использования find была для вас полезна. Если у вас есть вопросы или предложения, как сделать эту статью лучше, добро пожаловать в комментарии.

НЛО прилетело и оставило здесь промокоды для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS .

Источник статьи: http://habr.com/ru/company/first/blog/593669/

ИТ База знаний

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

Настройка программных телефонов

Корпоративные сети

Как найти файл в Linux? Руководство по команде find с примерами

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

Бесплатный вводный урок на онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят начать карьеру администраторов Linux, расширить текущие знания и сделать уверенный шаг в DevOps

Поиск папок

Чтобы сделать поиск по папкам команде find нужно передать параметр type d. Таким образом мы скажем команде find вести поиск только по директориям:

Поиск скрытых файлов

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

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

Команда find дает возможность вести поиск файлов размером больше, меньше или равным указанному значению. Чтобы найти файл размером больше 10Мб нужно ввести команду:

Для поиска файлов размером меньше указанного значения или равного ему нужно ввести следующие команды:

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

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

Допустим нам нужно найти несколько файлов, указанные в списке, который хранится в виде файла с расширением .txt. Для этого мы можем воспользоваться комбинацией команд find и grep. Чтобы данная команда работала корректно, каждый шаблона поиска в списке должен начинаться с новой строки.

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

Найти файл, которого нет в списке

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

Указываем максимальную глубину поиска

По умолчанию, команда find ищет файлы во всех директориях и поддиректориях. Допустим, если мы в качестве пути для поиска укажем корневую директорию «/», то система будет искать искомый файл по всему жесткому диску. Мы можем ограничить область поиска командой maxdepth указав ему насколько глубоко нужно искать файл.

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

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

Команда find также позволяет вести поиск по пустым файлам и директориям. Для этого команде добавляем флаг empty. Следующие две команды позволяют найти пустые файли и папки. Для поиска папок к строке поиске добавляет ключ d:

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

Поиск самого большого файла или папки

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

Заметьте, что при поиске мы прибегнули к двум другим удобным инструментам Linux: sort и tail. Sort отсортирует файл по их размеру, а tail покажет самый последний файл в списке, который и будет самым большим файлом/папкой. Мы можем изменить команду так, чтобы она выводила пять самых больших файлов для этого нужно воспользоваться следующей командой:

Также можно вывести файлы с самым меньшим размером. Следующая команда позволит вывести пять самых маленьких по объёму файлов:

Чтобы найти самую большую папку по указанному пути нужно ввести команду указанную ниже:

Поиск файлов с атрибутом setuid

Атрибут setuid файла позволяет обычному пользователю запускать файлы от имени root-а. Такие файлы тоже легко найти с помощью команды find и нескольких параметров. Команда имеет два параметра, которые позволяют искать файлы с конкретными правами: -user и perm. Чтобы найти файлы, который можно запускать от имени root-а можем прописать команду:

На скриншоте мы добавили еще параметр exec чтобы ограничить вывод команды find. Полная команда выглядит так:

Мы можем заменить root любым другим пользователем или просто опустить этот параметр и найти все файлы с правами запуска от имени root-а:

Поиск файлов с атрибутом sgid

Команда поиск файлов с атрибутом sgid почти такая же как и для SUID с той разницей, что вместо 4000 прописываем 2000:

Так же можем найти файлы, которые имеют оба указанных атрибута:

Исключение из вывода файлов и папок, к которым нет доступа

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

Этот случай особо актуален при поиске в корневой директории. Согласитесь сильно засоряет вывод, но этого можно избежать если перенаправить вывод stderr в stdout и передать grep для обработки. Следующей командой мы выведем все результаты работы команды find кроме строк, содержащих слова «Permission denied»^

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

Чтобы найти файлы, которые были изменены за указанный период времени используется параметр mtime. Ниже приведены несколько примеров для поиска файлов, изменённых за последний 30 дней, больше 30 дней и меньше чем за 30 дней:

Чтобы вывести более детальную информацию о найденных файлах можно указать параметр exec:

Сортировка результатов по времени

При необходимости отсортировать результате по времени можно воспользоваться параметром printf и утилитой sort:

По умолчанию sort упорядочивает файлы от старых к новым. Чтобы указать обратный порядок сортировки достаточно добавить ключ r к команде sort:

Разница между locate и find

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

Утилита locate ведёт поиск по базе, которая содержит все имена файлов, находящихся в системе. Так как команда locate не ищет указанный файл по всей системе, то она намного эффективней утилиты find. Но с другой стороны база данных этой утилиты обновляется раз в день, что не позволяет найти файлы, созданные раньше, чем 24 часов. Базу данных можно вручную обновлять командой updatedb.

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

Если же поиск ведётся в папке, где мало файлов, то лучше пользоваться командой find.

Нагрузка CPU командой find

При поиске по большим каталогам команда find может требовать больше ресурсов. Это должно по своей сути позволять более важным системным процессам иметь приоритет, но если необходимо, чтобы команда find употребляла меньше ресурсов машины, можно использовать команду ionice или nice.

Просмотреть состояние процессора можно командой:

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

А чтобы понизить приоритет использования CPU, нужно ввести следующую команду:

Или можно эти две команды комбинировать, чтобы обеспечить низкий приоритет как для Ввода/Вывода, так и для CPU.

Бесплатный вводный урок на онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят начать карьеру администраторов Linux, расширить текущие знания и сделать уверенный шаг в DevOps

Полезно?

Почему?

😪 Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.

😍 Полезные IT – статьи от экспертов раз в неделю у вас в почте. Укажите свою дату рождения и мы не забудем поздравить вас.

Источник статьи: http://wiki.merionet.ru/servernye-resheniya/39/kak-najti-fajl-v-linux-rukovodstvo-po-komande-find-s-primerami/

Linux как найти файл по имени

В этой статье поговорим о командах поиска файлов и директорий в терминале, таких как find, locate, whereis, which.

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

В общем виде команда find выглядит следующим образом:

где путь – это директория, в которой мы хотим произвести поиск, опции — это ключи-параметры поиска.

В обычном случае мы просто указываем полный путь к нужному каталогу, например:

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

. поиск в текущем каталоге;
/ поиск от корневого каталога;
поиск в домашнем каталоге.

Основные опции команды find.

  • -name — поиск файлов по имени;
  • -user — поиск файлов, принадлежащих указанному пользователю;

-type — поиск файлов определенного типа. Вот наиболее используемые типы:

  • d – каталог;
  • f – обычный файл;
  • l – символическая ссылка;
  • -size -n,+n, n — поиск файлов с размером меньше(-), больше (+) или равное n единиц;
  • -mtime -n, +n — поиск файлов, созданных или модифицируемых менее чем (-) или более чем (+) n дней назад.
  • Примеры использования команды find.

    Самый простой вариант поиска, указываем путь и имя файла. Давайте найдем файл с именем file1:

    Но если мы напишем не полностью имя, например «file», то файл с именем «file1» не найдется. Для этого нужно писать имя в кавычках и в конце добавить *, вот таким образом:

    Но нашлись и файлы и директории, в названии которых встречается «file». Чтобы найти только файлы, воспользуемся опцией -type , передав ей значение f, чтобы искать только файлы (для поиска только директорий мы бы передали d):

    Но теперь нашлись файлы во всех вложенных директориях. А что если нам надо найти файл только в текущей директории или с уровнем вложенности 1 или 2?

    Для этого используется опция maxdepth (глубина поиска), то есть, если мы хотим найти файл в директории поиска, без рекурсивного просмотра всех директорий:

    Теперь нашлись файлы только в директории поиска.

    Если хотим включить первый уровень внутри каталога поиска, тогда нужно указать maxdepth 2:

    Как видно на скриншоте, теперь найден файл и в папке «Загрузки».

    Нужно указывать опцию -maxdepth перед опцией -name.

    Теперь разберем очень важную опцию поиска файла по размеру «-size».

    Важно, если мы хотим найти файлы размером в килобайтах, нужно писать в конце k, для мегабайт M, для гигабайт G, для байт b. Важно соблюдать регистр.

    Разберем пример, найдем файлы в домашней директории менее 10 килобайт с именем file*:

    Нашлись все файлы в домашней директории и ее папках, размер которых менее 10 килобайт.

    Теперь давайте найдем файлы в домашней директории, которые весят больше 100 мегабайт:

    Нашелся один файл, который весит более 100 мегабайт.

    Также можно искать файлы определенного размера, например, которые весят 1G или 1M:

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

    Поиск файлов, которые были изменены или созданы менее 2 дней назад:

    Также можно использовать опцию -user, чтобы найти только файлы определенного пользователя:

    Вместо username нужно подставить имя пользователя. Если искать ваши файлы, то можно использовать системную переменную $USER, которая выводит имя текущего пользователя.

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

    Данная команда может показаться сложной на первый взгляд. Вот это вот регулярное выражение \( ! -regex ‘.*/\..*’ \) как раз и убирает из поиска все скрытые файлы и директории:

    Поиск файлов, которые были изменены или созданы более 100 дней назад:

    В одной статье очень трудно перечислить все возможности этой команды поиска файлов и директорий. Это самое основное и часто используемое.

    Помимо find для поиска файлов существует ещё команда locate.

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

    Команда locate ищет файлы очень быстро, так как она производит поиск не по файловой системе, а по собственной базе данных.

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

    Хотя это и не обязательно (система это делает периодически), просто если не выполнить её, то вам может вывести в поиске удаленные файлы или не вывести только что созданные.

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

    Примеры использования команды locate.

    Давайте найдем все файлы с расширением .exe:

    Если мы хотим вывести результаты поиска в одну строку, тогда используем следующую опцию -0 (это тире и ноль)

    Но если мы ищем файл с названием «file», то не найдутся файлы с именами в другом регистре: File, FILE и т.д.

    Чтобы поиск сделать регистронезависимым, то нужно использовать следующую опцию -i, то есть:

    Если мы хотим узнать просто количество файлов, имеющих в имени «file», или количество файлов с определенным расширением, к примеру .exe, то нужно указать опцию -c:

    Что означает, что в системе 10 файлов имеют расширение .exe.

    Если мы хотим ограничить число выводимых файлов в поиске по заданному параметру, мы ставим опцию -n и число:

    То есть, данная команда с опцией -n 2 выведет нам только 2 первых найденных файла:

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

    Полезные команды whereis и which.

    У нас установлены программы в системе и чтобы узнать размещение бинарных файлов, исходных кодов и руководств, относящихся к установленной программе, можно выполнить команду whereis. Для примера найдем информацию о пакете google-chrome:

    Команда же which отображает полный путь к установленной программе. Также в качестве примера возьмем google-chrome:

    Источник статьи: http://linuxrussia.com/terminal-search-files.html

    Команда find Linux

    Введение

    find это мощный инструмент для работы с файлами.

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

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

    Поиск

    Найти и вывести на экран все файлы в директории

    -name: Поиск по имени

    Найти по полному имени в текущей директории

    Поиск по расширению

    Найти по расширению файла с помощью wildcard *

    Ищем в /usr/share/doc все pdf файлы

    find /usr/share/doc -name ‘*.pdf ‘

    -not: обратное условие

    Найти в текущей директории все файлы кроме php

    Несколько условий вместе

    Найти все файлы, которые начинаются с log но не имеют расширения .txt

    -o: Логическое или

    Найти либо .html либо .php файлы

    Найти и скопировать

    Найти и сразу скопировать в текущую директорию

    find /usr/share/doc -name ‘*.pdf ‘ -exec cp <> . \;

    Найти в текущей директории

    Удалить из текущей директории

    Поиск по типу

    Чтобы найти только файлы определённого типа выполните find с опцией type.

    Например, что найти все ссылки в директории /etc

    Подробнее о файлах в Linux читайте в статье «Типы файлов в Linux»

    Уровни вложенности

    Найти все ссылки только на верхнем уровне вложенности

    find /etc -maxdepth 1 -type l

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

    Filesystem Size Used Avail Use% Mounted on /dev/sda1 1014M 194M 821M 20% /boot

    Найти обычные файлы определённого размера

    Чтобы найти обычные файлы нужно использовать -type f

    find /boot -size +20000k -type f

    find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img /boot/initramfs-3.10.0-1160.el7.x86_64.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img

    Файлы бывают следующих типов:

    — : regular file
    d : directory
    c : character device file
    b : block device file
    s : local socket file
    p : named pipe
    l : symbolic link

    find /boot -size +10000k -type f

    find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img /boot/initramfs-3.10.0-1160.el7.x86_64.img /boot/initramfs-3.10.0-1160.el7.x86_64kdump.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64kdump.img

    То же самое плюс показать размер файлов

    find /boot -size +10000k -type f -exec du -h <> \;

    find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied 60M /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img 21M /boot/initramfs-3.10.0-1160.el7.x86_64.img 13M /boot/initramfs-3.10.0-1160.el7.x86_64kdump.img 21M /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img 14M /boot/initramfs-3.10.0-1160.2.2.el7.x86_64kdump.img

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

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

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

    Найти в проекте topbicyle все директории с qa в названии

    find topbicycle/ -name ‘*qa* ‘ -type d

    Переместить определённые файлы но не директории

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

    find -maxdepth 1 -type f -name ‘sub* ‘ -exec mv <> subprocess \;

    -perm: поиск по правам доступа

    find . -type f -perm 0600
    find . -type f ! -perm 0600

    -path: поиск путей

    Если мне нужно посмотреть содержимое директорий /code/php и /code/python

    Пример укороченного результата

    -prune: ограничить глубину

    С помощью path можно посмотреть содержимое всех поддиректорий code на букву p /code/p*

    Если нужно посмотреть только поддиректории верхнего уровня — используется -prune

    Получили только поддиректории без их содержимого

    Исключить директорию из поиска

    Из предыдущего параграфа понятно, что с помощью prune можно исключить директорию из поиска.

    Пример: найти в ./code все файлы, заканчивающиеся на index.php но проигнорировать поддиректории на p, то есть в директориях python и php не искать.

    find ./code -path «./code/p*» -prune -false -o -name «*index.php»

    ./code/js/errors/index.php ./code/js/index.php ./code/c/index.php ./code/cpp/index.php ./code/go/pointers/index.php ./code/go/declare_variable/index.php ./code/go/constants/index.php ./code/go/index.php ./code/java/index.php ./code/dotnet/index.php ./code/ruby/index.php ./code/theory/index.php ./code/index.php

    -false нужен чтобы не выводить проигнорированные директории.

    Ещё один способ исключить директорию из поиска

    find ./code -name «*.php « -not -path «./code/p*»

    find + sed

    К результатам команды find можно сразу же применить sed

    find . -type f -name ‘*.php ‘ -exec sed -i ‘s @ python/old_file_name\.php @ python/new_directory/new_name\.php @ ‘ <> \;

    . означает, что ищем в текущей директории (и вложенных)

    Эта команда заменяет везде

    find . -type f -name ‘*.php ‘ -exec sed -n ‘/\/i\/aws\/oauth.php/ p ‘ <> \;

    Эта команда ищет по всем .php файлам строку /i/aws/oauth.php

    Если нужно не найти или заменить строку а показать название файла, в котором есть определённые символы — удобно воспользоваться связкой find + grep

    Добавить в функцию my_function дополнительный аргумент — сразу в всех .php файлах.

    find -type f -name «*.php « -exec sed ‘s / my_function(\$old_arg1,\ \$old_arg2) / my_function(\$old_arg1,\ \$old_arg2,\ \$new_arg1 / ‘ <> \;

    find -type f -name «*.php « -exec sed ‘s / my\_function(\$old\_arg1,\ \$old\_arg2) / my\_function(\$old\_arg1,\ \$old\_arg2,\ \$new\_arg1 / ‘ <> \;

    find + grep

    К результатам команды find можно сразу же применить grep

    find . -type f -name ‘*.php ‘ -exec grep -l ‘/dvps/aws/oauth.php ‘ <> \;

    Эта команда ищет по всем .php файлам строку /i/aws/oauth.php и показывает в каком файле встречается эта строка

    Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

    Источник статьи: http://www.andreyolegovich.ru/linux/find.php

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *