Как найти все файлы unix

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

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

Синтаксис
Примеры
    Поиск по имени
    По дате
    По типу файла
    По правам
    По содержимому
    С сортировкой по дате изменения
    Лимиты
    Действия над найденными объектами
Запуск по расписанию в CRON

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

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 или -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. Поиск файла по части имени:

find / -name “*.tmp”

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

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

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

find . -name “sess_*” -a -name “*cd”

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

find . -name “sess_*” -o -name “*cd”

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

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

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

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

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

find . ! -name “*.log”

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

Поиск по дате

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

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 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

По типу

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

find . -type f

* 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 %pn’ | sort -r

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

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

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

find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | 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 . -name “*.tmp” | wc -l

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

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:

crontab -e

И добавляем:

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

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

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

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

Команда 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. Поиск всех файлов

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

find

find .

find . -print

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

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

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

find ./Изображения

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

find . -name "*.png

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

find . -name "testfile*"

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

find . -iname "TeStFile*"

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

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

find . -maxdepth 1 -name "*.php"

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

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

find . -not -name "test*"

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:

find . -type f -perm 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. Поиск файлов в группах и пользователях

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

find . -user sergiy

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

find /var/www -group www-data

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

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

find / -mtime 50

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

find / -atime 50

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

find / -mtime +50 -mtime -100

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

find . -cmin 60

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

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

find / -size 50M

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

find / -size +50M -size -100M

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

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

Самые большие:

find . -type f -exec ls -s {} ; | sort -n | head -5

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

find /tmp -type f -empty

find ~/ -type d -empty

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

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

find . -empty -exec ls -ld {} ;

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 23 января 2020 года; проверки требуют 7 правок.

find — утилита поиска файлов по имени и другим свойствам, используемая в UNIX‐подобных операционных системах. Может производить поиск в одном или нескольких каталогах с использованием критериев, заданных пользователем. По умолчанию find возвращает все файлы в рабочем каталоге. Более того, find позволяет применять пользователю определённые действия ко всем найденным файлам. Также поддерживаются регулярные выражения. Для поиска файлов по содержимому следует пользоваться утилитой grep.

Список ключей[править | править код]

  • -amin — время последнего обращения к файлу (в минутах).
  • -atime — время последнего обращения к файлу (в днях).
  • -cmin — время последнего изменения владельца или прав доступа к файлу (в минутах).
  • -ctime — время последнего изменения владельца или прав доступа к файлу (в днях).
  • -delete — удалять найденные файлы.
  • -depth или -d — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога.
  • -empty — только пустые каталоги.
  • -exec command {} ; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис.
  • -group — владелец: группа пользователя или GID.
  • -L — разворачивать символические ссылки.
  • -ls — генерирует вывод как команда ls -dgils.
  • -maxdepth — максимальный уровень вложенности для поиска. «-maxdepth 1» ограничивает поиск текущим каталогом.
  • -mmin — время последнего изменения файла (в минутах).
  • -mount или -xdev — не переходить на другие файловые системы.
  • -mtime — время последнего изменения файла (в днях).
  • -name — искать по маске имени файла. Опция -name регистрочувствительная, то есть различает прописные и строчные буквы. Для поиска файлов без учета регистров воспользуйтесь опцией -iname.
  • -newer другой_файл — искать файлы, созданные позже, чем другой_файл.
  • -ok — перед выполнением команды, указанной в -exec, выдаёт запрос.
  • -P — не разворачивать символические ссылки (поведение по умолчанию).
  • -perm — указываются права доступа.
  • -print0 — выводит путь к текущему файлу на стандартный вывод, за которым следует символ ASCII NULL (код символа 0).
  • -print — показывает на экране найденные файлы.
  • -prune — используется, когда вы хотите исключить из поиска определённые каталоги.
  • -regex — искать по имени файла, используя регулярные выражения.
  • -regextype тип — указание типа используемых регулярных выражений.
  • -size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).
  • -type — тип искомого: f=файл, d=каталог (directory), l=ссылка (link), p=канал (pipe), s=сокет.
  • -user — владелец: имя пользователя или UID.

Примеры[править | править код]

Поиск в текущем каталоге[править | править код]

Найти все файлы в текущем и дочерних каталогах, название которых начинается с my.

Обратите внимание: в понятиях unix файлом является все в том числе и каталоги.

Для поиска исключительно по именам файлов нужно использовать дополнительную опцию -type f 

find . -name 'my*' -type f

Поиск в определенном каталоге[править | править код]

Найти все файлы в корневом и дочерних каталогах, название которых начинается с my.

Поиск в корневом каталоге эквивалентен поиску по всему компьютеру.

Поиск файлов в каталогах /usr/local/man и /opt/local/man

find /usr/local/man /opt/local/man -name 'my*'

Поиск по нескольким именам файлов[править | править код]

Найти все файлы в текущем и дочерних каталогах, название которых начинается с my или qu.

Обратите внимание, что по умолчанию все аргументы соединены с помощью логического и (опция -a, от англ. and). Если необходимо объединить несколько аргументов логическим или — используйте опцию -o, от англ. or.

find . ( -name "my*" -o -name "qu*" ) -print

Поиск нескольких типов файлов, используя регулярные выражения[править | править код]

Найти все файлы в текущем и дочерних каталогах, расширение которых совпадает с перечисленными.

Данный поиск осуществляется с помощью регулярных выражений.

find . -type f -regex ".*.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG)"

Предыдущий пример можно также записать с помощью регулярных выражений

find . -type f -regex "(my|qu).*"

Выполнение команды[править | править код]

Опция -exec выполняет следующую за ней команду и подставляет вместо {} текущий файл. Найти все каталоги ниже указанного каталога и изменить им права доступа с помощью команды chmod:

find /path -type d -exec chmod 0755 {} ;

Опция -exec работает примерно в 10 раз медленнее, чем перенаправление вывода через xargs, поэтому данный код рекомендуется писать следующим образом:

find /path -type d | xargs chmod 0755

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

find /path -type d -exec chmod 0755 "{}" ;

Или воспользоватся опцией -print0 и -0 позволяет обрабатывать аргументы, содержащие пробелы и кавычки:

find /path -type d -print0 | xargs -0 chmod 0755

Поиск всех файлов php.ini в текущем каталоге и замена текста в каждом найденном файле с помощью команды sed.

find . -name 'php.ini' -exec sed -i 's/log_errors = Off/log_errors = On/g' "{}" ;

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

find . -regex ".*.(php|js|css)" -exec sed -i 's//bitrix/templates///local/templates//g' "{}" ;

Поиск в зависимости от времени создания[править | править код]

Найти и вывести список файлов во всей файловой системе, изменённых в течение последней минуты:

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

Поиск по размеру файла[править | править код]

Найти и вывести список файлов во всей файловой системе, чей размер больше 100 Мб:

find / -size +100M -print

Поиск файлов, принадлежащих определенному пользователю[править | править код]

В данном примере поиск осуществляется по файлам принадлежащим пользователю с именем ilya

Поиск файлов c ограничением глубины[править | править код]

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

Начинает поиск в папке /var/www, но не глубже /var/www/*/*/*/* .

find /var/www -maxdepth 4 -name 'restore.php'

Поиск файлов с перечислением каталогов.[править | править код]

Ищет файлы в указанных каталогах.

find /var/spool/postfix/{deferred,active,maildrop,incoming}/ -type f

Поиск файлов по маске с исключением.[править | править код]

Ищет файлы php в текущем каталоге, исключая index.php

find . -name "*.php" ! -name "index.php"

Рекурсивное удаление файла от текущего каталога, на заданную глубину.[править | править код]

Удаляет все файлы restore.php от текущего каталога, но не глубже 4 уровня вложенности относительно аргумента в командной строке

Начинает поиск в папке /var/www, но не глубже /var/www/*/*/*/* и удаляет все файлы restore.php в найденном.

find /var/www -maxdepth 4 -name 'restore.php' -exec rm -r {} ;

Игнорирование ошибок[править | править код]

Если при поиске возникает ошибка (например — нет доступа чтения из каталога) то вывод команды становится менее информативным. Перенаправьте вывод STDERR в /dev/null.

find / -name 'secret.keys' -print 2>/dev/null

Также можно использовать один из следующих вариантов:

find / -name  "имя искомого файла" |& grep -v 'Отказано в доступе'
find / -name  "имя искомого файла" |& grep -v 'Permission denied'

Ссылки[править | править код]

  • find(1) — страница справки man по пользовательским командам GNU/Linux  (англ.)  (англ.)
  • «Как выловить битые ссылки»  (недоступная ссылка) — с помощью find’а найти все битые ссылки.  (рус.)
  • Поиск файлов в Linux — разнообразные примеры использования команды find (рус.)


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

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

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

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

$ find

В качестве альтернативы, мы можем также использовать ‘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, которая способна существенно упростить задачу поиска файлов.

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

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

Команда «find» имеет следующий синтаксис:

find [path] [expression]

где «path» — это путь к каталогу, в котором вы хотите искать файлы, а «expression» — это выражение, которое определяет критерии поиска.

Поиск по типу

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

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

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

find . -type d
Поиск по имени

Для поиска по имени используется параметр -name. Например, команда для поиска всех файлов с расширением .txt в каталоге /home/ будет выглядеть так:

find /home/ -type f -name "*.txt"

Найти все папки с именем my_folder в текущем каталоге можно так:

find . -type d -name "my_folder"
Поиск по размеру файла

Для поиска по размеру используется параметр -size.

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

Единицы измерения указываются так:

  • c — Байт
  • k — Кбайт
  • M — Мбайт
  • G — Гбайт

Например, найти все файлы, в каталоге /home/ с размером больше 100 Мбайт можно так:

find /home/ -size +100M
Поиск пустых файлов и каталогов

Для поиска пустых папок и файлов используется параметр -empty. Например, найдём все пустые файлы и папки в каталоге /home/:

find /home/ -empty
Поиск файлов по дате

Доступны следующие параметры:

  • -mtime — Время изменения файла. Указывается в днях.
  • -mmin — Время изменения в минутах.
  • -atime — Время последнего обращения к объекту в днях.
  • -amin — Время последнего обращения в минутах.
  • -ctime — Последнее изменение владельца или прав на объект в днях.
  • -cmin — Последнее изменение владельца или прав в минутах.

Например, найдём все файлы, изменённые в каталоге /home/ за последние 60 минут:

find /home/ -cmin -60

А если мы наоборот, хотим найти все файлы, изменённые раньше, чем час назад, то в команде минус меняем на плюс:

find /home/ -cmin +60

Можно также вывести список файлов с сортировкой по дате модификации.

Например, вот эта команда выведет все файлы из каталога /home/ с сортировкой по дате модификации. Файлы изменённые недавно, окажутся в начале списка:

find /home/ -type f -printf '%TY-%Tm-%Td %TT %pn' | sort -r

А вот так, мы изменим сортировку, то есть последние изменённые файлы окажутся в конце списка:

find /home/ -type f -printf '%TY-%Tm-%Td %TT %pn' | sort -n

А так, мы можем ограничить количество выводимых результатов. Например вывести только 50:

find /home/ -type f -printf '%TY-%Tm-%Td %TT %pn' | sort -n | head -n 50
Поиск по пользователю или группе

Для поиска файлов принадлежащих определённому пользователю, или группе, используются параметры -user и -group. Например, найдём в каталоге /home/ все файлы, принадлежащие пользователю admin:

find /home/ -user admin
Поиск по правам доступа

Для поиска по правам доступа используется параметр -perm. Например, найдём все файлы с правами 777 в каталоге /home/:

find /home/ -perm 777
Поиск с использованием логических операторов

При поиске можно использовать логические операторы:

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

Например, найдём в каталоге /home/ все файлы начинающиеся на sess_ или заканчивающиеся на tmp:

find /home/ -type f -name "sess_*" -o -name "*tmp"
Исключить из поиска определённые папки

При поиске с помощью команды find, можно исключать определённые каталоги. Например мы хотим найти все файлы с расширением .php, изменённые за последние 2 дня во всех папках сайта, за исключением папок /bitrix/managed_cache/ и /bitrix/cache/:

find /home/www/ -type f -name "*.php" -mtime -1 -not -path "*/bitrix/managed_cache/*" -not -path "*/bitrix/cache/*"
Как удалить найденные файлы

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

Например, удалим из папки /tmp/ все файлы старше 10 дней:

find /tmp/ -type f -mtime +10 -delete

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

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

Обсудить задачу

    Другие статьи по теме:
  • Перенос большой базы MySQL, если не достаточно места для дампа
  • Как в Linux изменить текстовый редактор по умолчанию
  • Шпаргалка по командам EXIM
  • Быстрый перенос сайта на другой сервер через SSH
  • Как работать с архиваторами в консоли Linux (шпаргалка)

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