- Найти команду в Linux (поиск файлов и каталогов)
- find командный синтаксис
- Найти файлы по имени
- Найти файлы по расширению
- Найти файлы по типу
- Найти файлы по размеру
- Найти файлы по дате изменения
- Найти файлы по разрешениям
- Найти файлы по владельцу
- Найти и удалить файлы
- Выводы
- Поиск файлов. Команда find
- Linux bash поиск файлов
Найти команду в Linux (поиск файлов и каталогов)
Команда find — один из самых мощных инструментов в арсенале системных администраторов Linux. Он ищет файлы и каталоги в иерархии каталогов на основе заданного пользователем выражения и может выполнять указанное пользователем действие для каждого совпадающего файла.
Вы можете использовать команду find для поиска файлов и каталогов на основе их разрешений, типа, даты, владельца, размера и т. Д. Его также можно комбинировать с другими инструментами, такими как grep или sed .
find командный синтаксис
Общий синтаксис команды find следующий:
- Атрибут options управляет обработкой символических ссылок, параметрами отладки и методом оптимизации.
- Атрибут path. определяет начальный каталог или каталоги, в которых find будет искать файлы.
- Атрибут expression состоит из параметров, шаблонов поиска и действий, разделенных операторами.
Для поиска файлов в каталоге пользователь, вызывающий команду find должен иметь разрешения на чтение в этом каталоге.
Давайте посмотрим на следующий пример:
- Параметр -L (параметры) указывает команде find переходить по символическим ссылкам.
- /var/www (путь…) указывает каталог, в котором будет производиться поиск.
- (Выражение) -name «*.js указывает find искать файлы, заканчивающиеся на .js (файлы JavaScript).
Найти файлы по имени
Поиск файлов по имени, вероятно, является наиболее частым применением команды find . Чтобы найти файл по имени, используйте параметр -name за которым следует имя файла, который вы ищете.
Например, чтобы найти файл с именем document.pdf в каталоге /home/linuxize , вы должны использовать следующую команду:
Чтобы запустить поиск без -iname регистра, измените параметр -name на -iname :
Приведенная выше команда будет соответствовать «Document.pdf», «DOCUMENT.pdf» и т. Д.
Найти файлы по расширению
Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся на .log.gz внутри .log.gz /var/log/nginx , вы должны ввести:
Важно отметить, что вы должны либо заключить шаблон в кавычки, либо экранировать символ звездочки * обратной косой чертой чтобы он не интерпретировался оболочкой при использовании подстановочного знака.
Чтобы найти все файлы , которые не соответствуют регулярному выражению *.log.gz вы можете использовать -not вариант. Например, чтобы найти все файлы, которые не заканчиваются на *.log.gz вы должны использовать:
Найти файлы по типу
Иногда вам может потребоваться поиск определенных типов файлов, таких как обычные файлы, каталоги или символические ссылки. В Linux все является файлом.
Для поиска файлов по их типу используйте параметр -type и один из следующих дескрипторов, чтобы указать тип файла:
- f : обычный файл
- d : каталог
- l : символическая ссылка
- c : символьные устройства
- b : блочные устройства
- p : именованный канал (FIFO)
- s : сокет
Например, чтобы найти все каталоги в текущем рабочем каталоге , вы должны использовать:
Типичным примером может быть рекурсивное изменение разрешений файлов веб-сайтов на 644 и разрешений каталогов на 755 с помощью команды chmod :
Найти файлы по размеру
Чтобы найти файлы по размеру файла, передайте параметр -size вместе с критериями размера. Вы можете использовать следующие суффиксы, чтобы указать размер файла:
- b : блоки по 512 байт (по умолчанию)
- c : байты
- w : двухбайтовые слова
- k : килобайты
- M : мегабайты
- G : гигабайты
Следующая команда найдет все файлы размером ровно 1024 байта внутри каталога /tmp :
Команда find также позволяет вам искать файлы, которые больше или меньше указанного размера.
В следующем примере мы ищем все файлы 1MB менее 1 1MB внутри текущего рабочего каталога. Обратите внимание на минус — символ перед значением размера:
Если вы хотите искать файлы размером более 1 1MB , вам нужно использовать символ плюс + :
Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы 2MB от 1 до 2MB :
Найти файлы по дате изменения
Команда find также может искать файлы на основе их последнего изменения, доступа или времени изменения.
То же, что и при поиске по размеру, используйте символы плюс и минус для «больше чем» или «меньше чем».
Допустим, несколько дней назад вы изменили один из файлов конфигурации dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в /etc/dovecot/conf.d который заканчивается на .conf и был изменен за последние пять дней:
Вот еще один пример фильтрации файлов по дате модификации с использованием опции -daystart . Приведенная ниже команда перечислит все файлы в каталоге /home которые были изменены 30 или более дней назад:
Найти файлы по разрешениям
Параметр -perm позволяет вам искать файлы на основе прав доступа к файлам.
Например, чтобы найти все файлы с разрешениями ровно 775 внутри каталога /var/www/html , вы должны использовать:
Вы можете поставить перед числовым режимом знак минус — или косую черту / .
Когда в качестве префикса используется косая черта / , то по крайней мере одна категория (пользователь, группа или другие) должна иметь по крайней мере соответствующие биты, установленные для соответствия файлу.
Рассмотрим следующий пример команды:
Приведенная выше команда будет соответствовать всем файлам с разрешениями на чтение, установленными для пользователя, группы или других.
Если в качестве префикса используется минус — , то для соответствия файла необходимо установить хотя бы указанные биты. Следующая команда будет искать файлы, которые имеют права на чтение и запись для владельца и группы и доступны для чтения другим пользователям:
Найти файлы по владельцу
Чтобы найти файлы, принадлежащие определенному пользователю или группе, используйте параметры -user и -group .
Например, чтобы найти все файлы и каталоги, принадлежащие пользователю linuxize , вы должны запустить:
Вот реальный пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю www-data и изменить владельца совпадающих файлов с www-data на nginx :
Найти и удалить файлы
Чтобы удалить все совпадающие файлы, добавьте параметр -delete в конец выражения соответствия.
Убедитесь, что вы используете эту опцию, только если уверены, что результат соответствует файлам, которые вы хотите удалить. Перед использованием опции -delete всегда рекомендуется распечатать совпадающие файлы.
Например, чтобы удалить все файлы, заканчивающиеся на .temp из /var/log/ , вы должны использовать:
Когда дело доходит до каталогов, find может удалять только пустые каталоги, как и rmdir .
Выводы
Мы показали вам, как использовать команду find с различными параметрами и критериями.
Эта статья должна дать вам фундаментальное представление о том, как находить файлы в ваших системах Linux. Вы также можете посетить страницу руководства find и прочитать обо всех других мощных параметрах команды find .
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.
Источник
Поиск файлов. Команда find
Одной из частых задач администрирования является поиск файлов на компьютере. Данная задача не так проста. Ведь поиск может производиться не только по имени, но и по множеству других свойств файла: размеру, владельцу, времени создания или изменения и др. Также искать можно в одном каталоге, во вложенных папках, в директориях, находящихся в разных ветвях дерева каталогов.
Таким образом, прежде чем выполнять поиск файлов, надо ответить на два вопроса: что искать и где искать. Отвечая на вопрос «что искать» мы должны указать свойство, по которому выполняется поиск, и его значение или диапазон значений. Пусть требуется найти файлы определенного размера, тогда запрос может быть сформулирован так: «найти файлы, размер которых больше 100 мегабайт».
Запрос может быть более сложным, предполагать поиск сразу по нескольким свойства. Например, надо найти файлы с определенным расширением, созданные за два последних дня.
При поиске по имени часто используются шаблоны и регулярные выражения, так как человек может не помнить полного имени, или выполняется поиск группы файлов. В последнем случае целью обычно является не столько сам поиск файлов, сколько их фильтрация. То есть выделение из общей массы с последующим выполнением той или иной операции, например, перемещения.
Отсюда следует, что в формуле «где искать + что искать» может быть третья составляющая – «что делать с найденным».
В командной оболочке Unix-подобных операционных систем для поиска используется программа, или утилита, find. С ее помощью можно гибко настроить критерии поиска, при необходимости выполнить какое-либо действие с найденными объектами. Понятно, что синтаксис команды find сложен, используется множество ключей и комбинаций параметров. Здесь мы рассмотрим несколько примеров использования find. Полную информацию можно получить, воспользовавшись справочной системой Linux.
В простом случае команда find имеет такой синтаксис:
find место_поиска ключ-свойство значение_свойства
На скрине место поиска обведено желтой рамкой, пара ключ и значение – оранжевой. В первом случае в каталоге folder ищутся все файлы, которые были изменены (-mtime) за последние 10 дней. Во втором случае файлы ищутся по имени (-name) в текущем каталоге. Имена файлов должны соответствовать шаблону *2*.
Обратите внимание, утилита find не поддерживает «стандарт команд Bash», согласно которому ключи из целого слова, а не одной буквы, должны начинаться с двух подчеркиваний. У find они начинаются с одного.
Если нужно указать несколько каталогов или несколько параметров поиска, это делается перечислением.
Здесь в двух каталогах выполняется поиск файлов png, размер которых больше 5 килобайт. Шаблон записан в кавычках, иначе не работает.
Если с найденными файлами надо что-то сделать, используется ключ -exec.
В примере ищутся файлы, оканчивающиеся на «txt». Каждый найденный передается команде cp (файл подставляется на место фигурных скобок). Команда cp копирует файл в каталог Загрузки. Конец аргумента exec обозначается обратным слэшем и точкой с запятой.
Воспользовавшись справочной системой Linux, выясните, какой ключ и как надо использовать для ограничения глубины поиска. Например, надо найти в домашнем каталоге файлы html. При этом во вложенных папках искать не следует.
Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.
Источник
Linux bash поиск файлов
Используйте утилиту find для поиска файлов в дереве каталогов по имени файла. Укажите имя дерева каталогов для поиска, а затем, с помощью опции `-name’ — имя нужного Вам файла.
Чтобы увидеть список всех файлов системы, которые называются `top’, наберите:
$ find / -name top [Enter]
Эта команда проведет поиск во всех каталогах, куда Вам разрешен доступ; если Вы не имеете прав прочесть содержимое каталога, find сообщить, что поиск в данном каталоге Вам запрещен.
Опция `-name’ различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией `-iname’.
Чтобы увидеть список всех файлов системы, которые называются `top’, без учета регистра символов, наберите:
$ find / -iname top [Enter]
Эта команда найдет все файлы, название которых состоит из букв `top’ — включая `Top’, `top’, и `TOP’.
Для поиска файлов, имена которых совпадают с определенным образцом, удобно использовать метасимволы. Образцы имен нужно указывать в одинарных кавычках.
Чтобы получить список файлов системы, имена которых начинаются с букв `top’, введите:
$ find / -name ‘top*’ [Enter]
Чтобы получить список файлов системы, имена которых начинаются с букв `top’, за которыми следуют еще три символа, введите:
$ find / -name ‘top. ‘ [Enter]
Чтобы получить список файлов системы, имена которых начинаются с букв `top’, за которыми следуют пять и более символов, введите:
$ find / -name ‘top. *’ [Enter]
Чтобы увидеть все файлы с расширением `.tex’в Вашем рабочем каталоге, независимо от их написания, введите:
-iname ‘*.tex’ [Enter]
Чтобы увидеть все файлы в каталоге `/usr/share’, содержащие в имени слово `farm’, введите:
$ find /usr/share -name ‘*farm*’ [Enter]
Используйте `-regex’ вместо `-name’ для поиска файлов, имена которых удовлетворяют регулярному выражению, или образцу, описывающему несколько строк.
Чтобы увидеть все файлы в текущем каталоге, имена которых содержат строку `net’ или `comm’, наберите:
Примечание: Опция `-regex’ совпадает с полным именем файла относительно указанного каталога, а не с отдельным именем файла.
Чтобы найти файлы определенного размера, используйте опцию `-size’, указав после нее требуемый размер файла. Размер файла может быть задан в трех различных формах: если перед ним указан знак плюс (`+’), ищутся все файлы, большие, чем указанный размер; если указан знак минус (`-‘), ищутся все файлы, меньшие, чем указанный размер; если префикс не указан, ищутся файлы точно указанного размера. (Единица измерения — блок 512 байт; символ `k’ после размера указывает килобайты, символ `b’ — байты.)
Чтобы вывести список файлов в каталоге `/usr/local’, размер которых больше 10,000 килобайт, введите:
$ find /usr/local -size +10000k [Enter]
Чтобы вывести список файлов в домашнем каталоге, размер которых меньше 300 байт, введите:
-size -300b [Enter]
Чтобы вывести список файлов системы, размер которых составляет 42 блока по 512 байт, наберите:
$ find / -size 42 [Enter]
Используйте опцию `-empty’ для поиска пустых файлов — т.е. файлов с размером 0 байт. Это полезно для поиска и удаления ненужных файлов.
Чтобы найти все пустые файлы в Вашем домашнем каталоге, введите:
Чтобы найти файлы, модифицированные в определенное время, используйте команду find с опциями `-mtime’ или `-mmin’; аргумент опции `-mtime’ определяет количество прошедших суток (24 часа), а аргумент `-mmin’ — количество прошедших минут.
Чтобы вывести все файлы в каталоге `/usr/local’, модифицированные точно 24 часа назад, введите:
$ find /usr/local -mtime 1 [Enter]
Чтобы вывести все файлы в каталоге `/usr’, модифицированные 5 минут назад, введите:
$ find /usr -mmin 5 [Enter]
Если Вы хотите указать промежуток времени, поставьте перед числом либо знак плюс (`+’), определяя большее или равное аргументу время, или знак минус (`-‘), определяя время, меньшее или равное аргументу.
Чтобы вывести все файлы в каталоге `/usr/local’, модифицированные в течение последних 24 часов, введите:
$ find /usr/local -mtime -1 [Enter]
Опция `-daystart’ определяет отсчет времени с момента начала текущих суток.
Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные вчера, введите:
-mtime 1 -daystart [Enter]
Чтобы вывести все файлы в каталоге `/usr’, модифицированные в течение года, введите:
$ find /usr -mtime +356 -daystart [Enter]
Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные в период от 2 до 4 дней тому назад, наберите:
-mtime 2 -mtime -4 -daystart [Enter]
Чтобы найти файлы, которые новее некоторого файла, введите его имя в качестве аргумента опции `-newer’.
Чтобы вывести все файлы в каталоге `/etc’, которые новее файла `/etc/motd’, введите:
$ find /etc -newer /etc/motd [Enter]
Чтобы найти все файлы новее определенной даты, используйте следующий трюк: создайте временный файл в каталоге `/tmp’ и установите дату его модификации на требуемую с помощью touch, а затем поределите его как аргумент для `-newer’.
Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные после 4 мая текущего года, введите:
Чтобы найти файлы, принадлежащие определенному пользователю, укажите имя пользователя в качестве агрумента опции `-user’. Например, для поиска всех файлов в каталоге `/usr/local/fonts’, принадлежащих пользователю warwick, наберите:
$ find /usr/local/fonts -user warwick [Enter]
Опция `-group’ подобным образом определяет файлы, принадлежащие некоторой группе пользователей.
Чтобы вывести список файлов в каталоге `/dev’, принадлежащих группе audio, введите:
$ find /dev -group audio [Enter]
Вы можете использовать команду find для выполнения других команд над найденными файлами, указав требуемые команды в качестве аргуентов опции `-exec’. Если Вы используететв команде строку `»’, эта строка в команде будет заменена именем текущего найденного файла. Окончание команды помечается строкой `’;».
Чтобы найти все файлы в каталоге ` /html/’ с расширением `.html’, и вывести строки из этих файлов, содержащие слово `organic’, введите:
/html/ -name ‘*.html’ -exec grep organic ‘<>‘ ‘;’ [Enter]
Чтобы ввести подтверждение выполнения команды для файла, найденного find, используйте ключ `-ok’ вместо `-exec’.
Чтобы удалить из Вашего домашнего каталога файлы, доступ к которым осуществлялся более года назад, с подтверждением для каждого файла, введите:
-used +365 -ok rm ‘<>‘ ‘;’ [Enter]
Вы можете определить несколько опций find одновременно, чтобы найти файлы, удовлетворяющие сразу нескольким критериям.
Чтобы вывести список файлов в Вашем домашнем каталоге, имена которых начинаются со строки `top’, и которые новее файла `/etc/motd’, введите:
-name ‘top*’ -newer /etc/motd [Enter]
Чтобы сжать все файлы в Вашем домашнем каталоге, размер которых превышает 2 Mb, и которые еще не сжаты с помощью gzip (не имеют расширения `.gz’), введите:
-size +2000000c -regex ‘.*[^gz]’ -exec gzip ‘<>‘ ‘;’ [Enter]
Чтобы найти наибольший файл в каталоге, используйте команду ls с опцией `-S’, которая сортирует файлы в нисходящем порядке по размеру (обычно ls выводит список файлов по алфавиту). Добавьте опцию `-l’, чтобы вывести размер и другие атрибуты файла.Пример:
Чтобы вывести оглавление каталога, начав с файлов наименьшего размера, используйте ls с ключами `-S’ и `-r’, которые сортируют вывод в обратном порядке.Пример:
Чтобы вывести список каталогов, отсортированных по размеру — то есть размеру всех содержащихся в них файлов — используйте du и sort. Команда du выводит список каталогов в восходящем порядке, начиная с самого маленького; опция `-S’ помещает при выводе в первую колонку размер каталога в килобайтах. Укажите требуемое дерево каталогов в качестве аргумента du и перенаправьте вывод в команду sort с ключом `-n’, которая отсортирует список по числам.
Чтобы вывести список подкаталогов в текущем дереве каталогов, отсортированный по размеру, введите:
$ du -S . sort -n [Enter]|
Если Вам нужно, чтобы первыми были указаны самые большие каталоги, используйте ключ `-r’:
$ du -S . sort -nr [Enter]|
Чтобы быстро определить количество файлов в каталоге, используйте ls и перенаправьте вывод в команду `wc -l’, которая выволит количество строк, пришедших на ее вход.
Для вывода общего количества файлов в текущем каталоге введите:
Общее количество файлов — 19.
Поскольку ls по умолчанию не показывает скрытые файлы, приведенная выше команда не будет их учитывать. Опция `-A’ для ls позволит посчитать обычные и скрытые файлы:
Чтобы посчитать количество файлов во всем дереве каталогов, а не только в отдельном каталоге, используйте find вместо ls, и укажите специальный ключ для find — строку `
! -type d’, чтобы исключить вывод и подсчет каталогов.
Чтобы вывести количество файлов в дереве `/usr/share’, введите:
$ find /usr/share \! -type d wc -l [Enter]|
Чтобы вывести количество файлов и каталогов в дереве `/usr/share’, введите:
$ find /usr/share wc -l [Enter]|
Чтобы вывести количество каталогов в дереве `/usr/share’, введите:
$ find /usr/share \! -type f wc -l [Enter]|
Команда which позволяет Вам получить полный путь к приложению или другой команде, указав базовое имя файла в качестве опции. Это удобно, чтобы убедиться, что данное приложение или команда присутствуют в системе.
Чтобы определить, установлен ли в Вашей системе perl и где он расположен, введите:
Next: Средства управления файлами Up: Средства поиска файлов Previous: Поиск файлов с помощью Contents Index Alex Otwagin 2002-12-16
Источник