Как найти только каталоги в linux

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

Время на прочтение
5 мин

Количество просмотров 122K

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

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

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

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

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

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

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

$ find directory-to-search criteria action

Где:

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

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

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

$ find . -name "s.txt"
./s.txt

Где:

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

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

$ find . -iname "s.txt"
./s.txt
./S.txt

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

$ find . -name "*.png"
./babutafb.png
./babutafacebook.png
./Moodle2.png
./moodle.png
./moodle/moodle1.png
./genxfacebook.png

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

$ find /home -name "*.png"
find: `/home/babuta/.ssh': Permission denied
/home/vagrant/Moodle2.png
/home/vagrant/moodle.png
/home/tisha/hello.png
find: `/home/tisha/testfiles': Permission denied
find: `/home/tisha/data': Permission denied
/home/tisha/water.png
find: `/home/tisha/.cache': Permission denied

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

find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/tisha/hello.jpg
/home/tisha/water.jpg

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

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

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

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

$ find . -type d
.
./.ssh
./.cache
./moodle

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

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

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

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

$ find . -size +1G
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg

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

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

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

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

$ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed

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

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

$ find . -cmin -60
.
./a.txt
./datafiles

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

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

$ find . -cmin +60

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

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

$ find . -atime +180

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

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

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

$ find /home -user tisha 2>/dev/null

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

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

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

$ find /home -perm 777

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

Операторы

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

  • -and
  • -or
  • -not

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

$ find /home  -user tisha  -and  -size +1G  2>/dev/null

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

$ find /home ( -user pokeristo -or -user tisha )  -and  -size +1G  2>/dev/null

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

Действия

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

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

-delete

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

$ find . -empty -delete

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

-exec:

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

-exec command {} ;

Где:

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

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

$ find . -empty -exec rm {} ;

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

$ find . -name "*.jpg" -exec cp {} /backups/fotos ;

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

Заключение

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

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

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

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

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

image

Обновлено Обновлено: 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 системах он может располагаться в разных местах.

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

Помимо поиска файлов и каталогов, сочетание команды find с другими командами позволяет вам действовать в соответствии с результатами. Добавление параметра -exec позволяет системным администраторам запускать внешние команды и выполнять такие действия, как копирование, перемещение, удаление или изменение разрешений для файлов, соответствующих указанным критериям, таким как размер, имя и т. д.

В этой статье мы начнем с объяснения основных команд поиска Linux с примерами. Это покажет вам, как найти файлы и каталоги. Затем мы покажем вам, как использовать параметр -exec для работы с файлами или каталогами в зависимости от их размера, разрешений и т. д.

Общий синтаксис команды поиска:

find {path} {name -of-file or dir-to-search} {action-to-take}

Где,

  • путь указывает каталог.
  • name-of-file or dir-to-search : имя файла или каталога для поиска
  • действие, которое необходимо выполнить: например, скопировать, удалить, переместить и т. д.

В этом руководстве мы объясним, как найти файлы и каталоги, соответствующие указанным шаблонам. Мы также увидим, как выполнять действия с файлами или каталогами, которые находит команда find. Руководство основано на Ubuntu, но применимо к большинству дистрибутивов и версий Linux.

Найти файлы и каталоги

Поиск определенных файлов по имени или расширению

Чтобы найти определенный файл, выполните следующую команду из корня (/). Команда содержит точное имя файла, который вы ищете.

find . -name file22.txt

Выход

./test/file22.txt
./sales/file22.txt

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

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

find ./test -name file22.txt

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

В нашем случае мы будем искать все, начинающиеся с файла letter в тестовом каталоге.

find ./test -name file*

Выход

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

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

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

find . -name *.txt

Выход

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

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

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

Если мы запустим команду;

find ./ -name "qa*"

Он возвращает следующий вывод

./test/qatree.pdf
./test/qa.txt
./home/qa

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

Найти только файлы или каталоги

Только для файлов используйте переключатель типа f.

Только файлы

find ./ -type f -name "qa*"

Выход

./test/qatree.pdf
./test/qa.txt

Только каталоги

Добавьте опцию type d, чтобы найти только каталоги.

find ./ -type d -name "qa*"

Выход

./home/qa

Команда поиска без учета регистра

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

find ./ -iname "qa*"

Выход

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Поиск файла из нескольких каталогов

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

find ./test ./numeric -name file22.txt -type f

Выход

./test/file22.txt
/root/numeric/file22.txt

Найти несколько файлов с разными расширениями из всех каталогов

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

найти . -type f ( -name «*.txt» -o -name «*.pdf» -o -name «*.doc»)

выход

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

Найти файлы, содержащие определенный текст

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

Чтобы найти все файлы, содержащие слово «гиперконвергенция», используйте;

find / -type f -exec grep -l -i "hyperconvergence" {} ;

Выход

/root/numeric/hci
/root/HCIP

Опция –i позволяет команде игнорировать регистры и находит текст независимо от того, написан он с заглавной буквы или нет, т. е. гиперконвергенция, гиперконвергенция и т. д.

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

find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

Выход

./numeric/hci

Ознакомьтесь с другими примерами команд grep.

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

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

Варианты размера включают в себя;

в — байты

к — килобайт

М — Мегабайты

Г – гигабайты

Найти файлы определенного размера — равно 30 МБ

Для поиска найдите все файлы размером 30 МБ.

find / -size 30M

Найти файлы больше указанного размера

find -size +2M

Выход

. /Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Найти файлы размером менее 10 МБ в текущем каталоге

find . -type f -size -10M

Найдите файлы размером от 100 до 200 МБ.

При поиске файлов в пределах определенного диапазона, например, от 100 до 200 МБ

find / -size +100M -size -200M

Ищите каталоги размером более 20 КБ

найти / -тип d -размер +20k

Найдите пустые файлы и каталоги.

Файлы

найти ./ -тип f -размер 0

или же

find ./ -type f –empty

Каталоги

find ./ -type d –empty

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

Найти файлы старше n дней

find /path/ -type f -name '*.txt' -mtime +8

-mtime +8 будет искать текстовые файлы старше 8 дней.

По дате модификации

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

find . -mtime -17 -type f 

Ищет каталоги, измененные за последние 10 дней.

find . -mtime -10 -type d 

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

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

Для просмотра файлов, к которым не обращались в течение последних 10 дней в домашнем каталоге.

find /home -atime +10

Файлы доступны ровно 10 дней назад

find /home -atime 10

Доступ в течение последних 10 дней

find /home -atime -10

Найти файлы, измененные за последние n дней

Вы также можете найти файлы в каталоге /home, измененные за последние 10 дней, с помощью команды;

find /home -mtime -10 

Найти файлы, измененные в течение определенного периода.

Например, все файлы, измененные от 6 до 15 дней назад в домашнем каталоге.

find /home -type f -mtime +6 -mtime -15

Файлы и каталоги, к которым обращались в течение последних 10 минут

Чтобы найти файлы, к которым обращались в течение последних 10 минут, используйте параметр -amin.

find . -amin -10 -type f

Выход

./.bash_history
./[email protected]:~#

Каталоги, к которым обращались в течение последних 10 минут

find . -amin -10 -type d

Найти файлы, соответствующие определенным разрешениям

Синтаксис

$ find -perm mode

Где режим — это разрешение, которое может быть либо числовым, например 644, 655, 700, 777 и т. д., либо буквами, например u=x, a=r+x и т. д.

Вы можете задать режим следующими тремя различными способами.

  • Без префикса, когда вы хотите найти файлы с точно указанными разрешениями.
  • С «-» для файлов с хотя бы указанным разрешением. Это возвращает файлы с указанными, а также дополнительными более высокими разрешениями.
  • Использование «/» требует указания владельца или группы с разрешением на файл.
  • Найти файлы с разрешением 777

    find -perm 777

    Выход

    ./file1

    Найдите файлы с размером не менее 766
    найти -пермь -766

    Выход

    ./file2
    ./file1

    Команда ищет все файлы, в которых

    • Владелец файла имеет права на чтение/запись/выполнение.
    • Группа имеет права на чтение/запись
    • Другие имеют разрешение на чтение/запись

    Таким образом, он возвращает два файла, соответствующих этому критерию — файл1 и файл2. Файлы не обязательно должны иметь точные разрешения 766 и могут иметь дополнительные разрешения такой же длины, но должны иметь как минимум указанные.

    Найти файлы, доступные для записи владельцу

    Теперь мы будем использовать «/» для поиска файлов, доступных для записи либо их владельцу, либо группе, либо другим лицам.

    find -perm /222
    .
    ./file2
    ./file3
    ./file1

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

    find -perm -220

    Выход

    ./file2
    ./file1

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

    Найти все файлы, принадлежащие Джеку

    find /home -user jack

    Выход

    /home/jack
    /home/jack/examples.desktop
    /home/jack/.gnupg
    /home/jack/.gnupg/private-keys-v1.d
    /home/jack/ans.cgi

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

    Найдите все текстовые файлы, принадлежащие Джеку.

    find /home -user jack -iname "*.txt"

    Выход

    /home/jack/docs/file32.txt

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

    find -name "*.conf" | ls -l

    Выход

    total 120
    drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
    drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
    drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
    drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
    -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
    drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
    -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

    Найдите и действуйте в соответствии с результатами

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

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

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

    [email protected]:~/ver$ ls -la
    
    total 8
    drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
    drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

    Теперь мы будем искать все файлы PHP (выше) и заменим их разрешения на 755.

    find ver -name "*.php" -type f -exec chmod 755 {} ;

    Команда ищет файлы PHP в каталоге ver, а затем устанавливает для них разрешение 755 (rwxr-xr-x).

    Полученные результаты

    [email protected]:~/ver$ ls -la
    total 8
    drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
    drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

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

    Найдите файлы с разрешениями 644 и измените их на разрешения 655.

    find . -type f -perm 644 -exec chmod 655 {} ;

    Вы также можете найти каталоги с правами 644 и заменить их на 755.

    find . -type d -perm 644

    Выход

    ./docs   

    Папка docs имеет 644 разрешения.

    drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

    Чтобы установить его на 755, мы запускаем

    find . -type d -perm 644 -exec chmod 755 {} ;

    Теперь мы можем еще раз проверить, что именно 755

    find . -type d -perm 755

    Выход
    .
    ./документы

    Сверху мы видим, что корневые каталоги и каталоги документов имеют разрешения 755.

    Команда Ls –la дает следующие данные

    drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

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

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

    Приведенная ниже команда найдет файл file22.txt и скопирует его в каталог ~/tmp/images.

    find -iname file22.txt -exec cp {} ~/tmp/images ;

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

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

    find -iname '*.jpg' -exec cp {} ~/tmp/images ;

    Это найдет и скопирует все файлы jpg в папку ~/tmp/images.

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

    Найдите и скопируйте один в несколько каталогов.

    find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

    Это найдет файл hci и скопирует его в три каталога /tmp/dir1/, /tmp/dir2/ и $HOME/3/.

    Найти и переместить файлы в другой каталог

    Чтобы переместить известный файл из каталога в другой. Переместить файл universal.php;

    find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

    Поиск и перемещение файлов с определенным расширением в другую папку

    find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

    Найдите определенные файлы и перейдите в другую папку

    find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

    Команда ищет все файлы с именами, начинающимися с uni и имеющими любое расширение. Затем он перемещает их в каталог /unifiles/

    Поиск и перемещение файлов по возрасту

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

    find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

    Это будет искать файлы PDF старше 20 дней и перемещать их в каталог backup1.

    Поиск и удаление файлов и каталогов

    Синтаксис для поиска и удаления файлов или каталогов в текущем каталоге:

    найти . -type f -name «файл для удаления» -exec rm -f {} ; удалить только файлы или

    найти . -type d -name «каталог для удаления» -exec rm -rf {} ; удалять только каталоги

    Найти и удалить только определенные файлы

    Чтобы найти и удалить файлы, начинающиеся с til, используйте;

    find . -type f -name "til*" -exec rm {} ; 

    Чтобы найти и удалить каталоги, начинающиеся с til

    find . -type d -name "til*" -exec rm {} ;

    Удалить как файлы, так и каталоги

    find . -name "til*" -exec rm -rf {} ; 

    Это удалит как файлы, так и каталоги, начинающиеся с букв til.

    Удалить по расширению

    Ниже показано, как найти и удалить все текстовые файлы в текущем каталоге. Замените txt другим расширением, таким как bak, pdf или любым другим, которое вы хотите удалить.

    find . -type f -name "*.txt" -exec rm -f {} ;

    Если вы хотите, чтобы система запрашивала подтверждение перед удалением каждого файла, добавьте параметр -i, как показано ниже.

    find . -type f -name "*.txt" -exec rm -i {} ;

    Выход

    rm: remove regular empty file './File22.txt'? y
    rm: remove regular empty file './file22.txt'? y
    rm: remove regular empty file './file23.txt'?

    По умолчанию -rm не удаляет каталоги, и вам необходимо использовать параметр –r, чтобы обеспечить рекурсивное удаление. Это гарантирует удаление пустых каталогов и каталогов, содержащих файлы. Параметр -f вызывает принудительное удаление и используется как для файлов, так и для каталогов.

    Найти и удалить файлы старше n дней

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

    find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

    Это приведет к удалению всех файлов .bak старше 20 дней.

    Найти и удалить только каталоги

    Чтобы удалить каталог с именем dir22

    find . -type d -name dir22 -exec rm -rf {} ;

    Убедитесь, что вы соответствуете регистру имени каталога, или используйте параметр -iname.

    find . -type d -iname Dir22 -exec rm -rf {} ;

    Удаляет как Dir22, так и dir22

    Для подтверждения перед удалением используйте параметр -i.

    find . -type d -iname Dir22 -exec rm -rf -i {} ;

    Выход
    rm: удалить каталог ‘./Dir22’? н
    rm: удалить каталог ‘./dir22’? у

    В нашем случае мы ввели n для каталога Dir22, который не будет удален, и y для каталога dir22, который теперь будет удален.

    Найти и удалить пустые файлы

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

    find ./ -type f -size 0 -exec rm -f {} ;

    или же
    найти ./ -тип f -размер 0 | xargs rm -f
    или же
    найти ./ -тип f -размер 0 –удалить

    Найти и удалить пустые каталоги

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

    find ./ -type d -empty -exec rmdir {} ;

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

    find ./ -type d -empty -delete

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

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

    Что дальше?

    Идите вперед и попробуйте приведенные выше команды поиска Linux в своей лаборатории или НЕПРОИЗВОДСТВЕННОЙ среде. Посмотрите, можете ли вы использовать некоторые из них для автоматизации очистки файловой системы с помощью Crontab. И, чтобы освоить Linux, проверьте это онлайн курс.

    Команда 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

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

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

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

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

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