Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

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

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

1)Выведите списки всех файлов текущей директории и ее подкаталогов

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

В качестве альтернативы, мы можем также использовать ‘find . ’ , которая выдаст вам тот же результат.

2)Найдите все файлы и директории в вашей текущей рабочей директории

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

$ find . -type d

Чтобы найти только файлы, а не директории:

$ find . -type f

3)Выведите список всех файлов определенной директории

Для того чтобы найти файлы из определенной директории надо ввести:

$ find /root

This command will look for all the files in /root directory.

4)Найдите файл по имени в директории

Для поиска файла по имени в определенной директории введите:

$ find /root -name "linuxtechi.txt"

Эта команда будет искать файл linuxtechi.txt в директории /root. Так же мы найти все файлы с расширением.txt:

$ find /root -name "*.txt"

5)Найдите файл во множестве директорий

Для поиска файлов во множестве директорий введите:

$ find /root /etc -name "linuxtechi.txt"

With this command, we can look for linuxtechi.txt file in /root & /etc directories.

С помощью этой команды мы можем найти файл linuxtechi.txt в директориях /root и /etc .

6)Найдите файл по имени без учета регистра

Ищите файлы без учета регистра с помощью -iname:

$ find /root -iname "Linuxtechi.txt"

В результате вы получите все файлы с названием linuxtechi.txt. При этом файлов может быть несколько, так как linuxtechi.txt будет равняться LINUXTECHI.txt .

7)Найдите все типы файлов отличные от упомянутого

Давайте предположим, что нам необходимо найти все файлы отличные от определенного типа файлов. Чтобы этого добиться вводим:

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

8)Найдите файлы по множеству признаков

Мы можем совмещать более чем одно условие при поиске файлов. Предположим, что нам нужны файлы с расширениями.txt и.html:

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

9)Найдите файлы с использованием условия OR

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

$ find -name "*.txt" -o -name "linuxtechi*"

10)Поиск файлов на основе разрешений

Чтобы найти файлы с определенным доступом используйте -perm:

$ find /root -type f -perm 0777

11)Найдите все скрытые файлы

Для поиска скрытых файлов в директории введите:

$ find ~ -type f name ".*"

12)Найдите все файлы со SGID

Для поиска файлов с битами SGID исполните команду:

$ find . -perm /g=s

13) Найдите все файлы со SUID

Для поиска файлов с битами SUID используем:

$ find . -perm /u=s

14)Найдите все исполняемые файлы

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

$ find . -perm /a=x

15)Найдите файлы с доступом только для чтения

К тому же, с помощью команды find можно найти файлы, доступные только для чтения:

$ find /root -perm /u=r

16)Найдите все файлы пользователя

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

$ find . -user linuxtechi

17)Найдите все файлы группы

Для поиска файлов определенной группы используем:

$ find . -group apache

18)Найдите все файлы определенного размера

Если мы хотим искать, размер которого нам известен, тогда можно использовать -size:

$ find / -size -2M

19)Найдите все файлы в диапазоне размеров

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

$ find / -size +2M -size -5M

Можно использовать команд find при поиске файлов тяжелее, чем, например, 50 mb:

$ find / -size +50M

20)Найдите файлы, измененные N дней назад

For example, we want to locate all the files that have been modified 8 days ago. We can accomplish that using ‘-mtime‘ option in find command

Например, мы можем обнаружить найти все файлы отредактированные 8 дней назад. Делается это с помощью команды -mtime:

$ find / -mtime 8

21)Найдите файлы, в которые заходили N дней назад

Можно найти файлы, в которые входили 8 дней назад с помощью -atime:

$ find / -atime 8

22)Найдите все пустые файлы и директории

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

$ find / -type f -empty

А чтобы вывести их директории:

$ find ~/ -type d -empty

23)Найдите самый большой и самый маленький файлы

Для вывода списка самых больших или самых маленьких файлов используем find в связке с sort , и, если нам понадобится вывести 3 "самых-самых", то используем еще head .

Для вывода трех файлов из текущей директории введем:

$ find . -type f -exec ls -s {} \; | sort -n -r | head -3

Схожим образом мы можем вывести самые маленькие файлы текущей директории:

$ find . -type f -exec ls -s {} \; | sort -n | head -3

24)Найдите все файлы с определенным доступом и сменить его на 644 (или еще на что-нибудь)

Команда find может предложить продвинутые варианты использования. К примеру, мы может изменить все разрешения 644 определенных файлов на 777. Для этого исполняем:

$ find / -type f -perm 644 -print -exec chmod 777 {} \;

25)Найдите все файлы, подходящие по определенным критериям, и удалите их

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

$ find / -type f -name "linuxtechi.*" -exec rm -f {} \;

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

Обновлено: 02.11.2019 Опубликовано: 25.07.2016

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

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

find <где искать> <опции>

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

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

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

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

Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type

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

  • 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 Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <команда> {} \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

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

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

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

find / -name "file.txt"

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

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

find / -name "*.tmp"

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

Найти все файлы или папки, которые начинаются на sess_ и заканчиваются на cd

find . -name "sess_*" -a -name "*cd"

* -a: логическое И, -o: логическое ИЛИ.

Поиск по дате

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

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 — искать только файлы.

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

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

find / -perm 0666

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

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 /home/user/* -type d -exec chmod 2700 {} \;

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

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

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

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

И добавляем:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm {} \;

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

В Linux есть очень мощная и полезная команда для поиска файлов — команда find . Она обладает большим количеством возможностей для поиска файлов, однако, иногда вызывает сложности у новичков во многом из-за ее синтаксиса.

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

Для начала рассмотрим простой пример использования команды find для поиска на компьютере файлов с именем config . Мы будем искать файлы config , начиная с корневого каталога / . Для этого вам нужно выполнять команду от имени пользователя root , чтобы иметь достаточно прав доступа, иначе получите сообщения «Permission denied». Итак, выполним команду:

Find / -name config -print

Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога / (первый параметр команды find) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

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

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

find [путь] [опции] [критерии поиска] [действия над файлами]

Путь

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

Опции

Опции команды find указываются, начиная с символа «-», за которым следует название опции. Рассмотрим основные опции.

Критерии поиска

У команды find может быть несколько критериев поиска (их также называют tests). Каждый критерий представляет собой определенное условие проверки, которое возвращает либо true либо false . Это можно сравнить с условиями оператора if в программировании. В процессе обработки очередного файла команда find по очереди проверяет каждый критерий, и если очередной критерий возвращает false , тогда команда find переходит к следующему файлу. Критериев у команды find довольно много, мы рассмотрим только некоторые из них.

-atime N Последний раз к файлу обращались N дней назад.
-mtime N Последнее изменение файла было N дней назад.
-name шаблон Имя файла (шаблон имени) без указания пути. Рекомендуется всегда заключать шаблон в кавычки.
-newer другой_файл Файл был изменен позже, чем другой_файл.
-size [±] N Размер файла равен N блокам, если указано +N , тогда размер файла больше N , -N — меньше. Символ после N означает размер блока. b — 512 байт, с — байт, w — 2 байта, k — килобайт, M — мегабайт, G — гигабайт.
-type C Файл типа C . Наиболее часто используемые значения для С: d — каталог, f — файл.
-user Имя_пользователя Файл принадлежит пользователю с именем Имя_пользователя.

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

Найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «~».

Find . -type f -name "~*" -print

Найти в текущем каталоге файлы, измененные позже, чем файл file.bak .

Find . -newer file.bak -type f -print

Операторы

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

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

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

Найти в текущем каталоге файлы, начинающиеся с символа «~» или c «temp» и являющиеся именно обычными файлами (-type f), а не каталогами.

Find . \(-name "~*" -or -name "temp*" \) -type f -print

Найти в текущем каталоге (не обрабатывая подкаталоги — -maxdeph 1) обычные файлы (-file f) размером больше 600 мегабайт и менее 1 гигабайта (-size) или файлы имя которых заканчивающиется на «.mpeg» (-name).

Find . -maxdepth 1 \(\(-size +600M -and -size -1G \) -or -name "*.mpeg" \) -and -type f

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

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

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

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

Найти в текущем каталоге обычные файлы размером больше 1000 байт и выполнить над ними команду ls -dils (действие ls).

Find . -size +1000c -type f -ls

Найти в текущем каталоге обычные файлы, начинающиеся с символа тильда «~», и для каждого файла выдавать запрос на его удаление (на выполнение команды rm).

Find . -name "~*" -type f -ok rm {} \;

Заключение

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

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

1) find: Для поиска файлов из командной строки вы можете использовать команду “find”. У этой команды следующий синтаксис:

find path criteria action

“path” - Секция для указания директории поиска. Если ничего не указано поиск идет по текущей директории.

“criteria” - Опции поиска.

“action” - Опции, которые влияют на состояние поиска или контролируют его, например,

2) locate: Команда “locate” это альтернатива команде “find -name”. Команда find ищет файлы в выбранной части файловой системы и процесс может быть не очень быстрым. С другой стороны, команда locate ищет файлы в базе данный, созданной специально для этих целей /var/lib/locatedb, что происходит намного быстрее. Для обновления базы используется команда updatedb .

3) whereis: whereis” возвращает место расположения кода (опция -b), ман-страниц (опция -m), и исходные файлы (опция -s) для указанной команды. Если опции не указываются, выводится вся доступная информация. Эта команда быстрее чем “find” но менее полная.

4) which: Команда “which” ищет все пути перечисленные в переменной PATH для указанной команды.

5) type:

При вызове без опций показывает, как имена будут интерпретироваться

при использовании в качестве имени команды. Если использована опция -a , команда type выдает список всех каталогов, где есть выполняемый файл с

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

если только не указана опция -p . К

хэшу команд не обращаются, если указана опция -a . Команда type возвращает 0,

если хоть один из аргументов найден, и 1 в противном случае.

Постовой

Explo.ru - все про туризм и отдых: горящие туры и путевки в Турцию, Египет,

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

В этом случае удобна команда find . Как ее использовать? Конечно, к этой утилите поставляется большая man-страница, но мы рассмотрим некоторые типичные случаи. Просмотреть дерево каталогов, начиная с текущего, и найти файл lostfile.txt:

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

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

Обзор дерева каталогов

Иногда необходимо получить обзор дерева каталогов. Например, Вы получили новый CD-ROM и хотели бы узнать, что на нем есть. Вы можете просто использовать ls - R . Лично я для удобочитаемости предпочитаю один из следующих способов. Tree (sunsite.unc.edu/pub/Linux/utils/file/tree-1.2.tgz) отображает дерево каталогов в виде диаграммы.

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

Можно воспользоваться небольшой perl процедурой, работающей с командой ls , которая делает подобные вещи. Ее можно загрузить отсюда: lsperl.gz . Существует много других утилит просмотра дерева каталогов, но для большинства случаев этих вполне достаточно.

Поиск файлов по содержанию (поиск текстовых строк в файлах).

Стандартные утилиты для поиска текстовых строк в файлах - grep / egrep для обычных поисков выражения и fgrep для поиска литеральных строк. Чтобы искать выражение во всех файлах в текущем каталоге, просто наберите:

Если Вам трудно запомнить эти длинные команды, используйте маленький скрипт, который можно загрузить отсюда: grepfind.gz . Скрипт еще и удаляет не-печатаемые символы из строки поиска, чтобы Вы случайно не получили в результате поиска egrep -ом двоичный файл.

Очень интересная программа поиска - agrep . Agrep работает в основном подобно egrep , но позволяет искать с учетом орфографических ошибок. Чтобы искать выражение и разрешить максимум 2 орфографические ошибки, наберите:

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

glimpse -i -2 "search exprission"

glimpse - тоже допускает орфографические ошибки (как и agrep) и -2 указывает, что разрешены две ошибки. glimpse доступен на

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: