Find
Categories:
Удивительная утилита, которая может найти все на диске и еще выполнить над тем, что нашла, все что угодно!
Командная строка find
find [path...] [expression]
Аргумент path
указывает директорию или список директорий с которой начинаем поиск.
Аргумент expression
состоит из опций, тестов и действий. Одно выражение может объединять любое их количество, используя традиционные булевы операторы, такие как and и or.
OPTION
- -d, -depth: указывает на проход утилиты вглубь в дочерние каталоги
- -mindepth, -maxdepth: уровень обработки каталогов вглубь
TESTS
Тесты — это основные команды утилиты.
-name
: проверяет, соответствует ли имя файла шаблону (использует простое сопоставление с шаблоном и смотрит только на имя файла)-regex
: проверяет, соответствует ли имя файла шаблону (использует стандартные регулярные выражения Emacs и проверяет полный путь к файлу)-type
: проверяет, относится ли файл к определенному типу (f
– обычный файл,d
– каталог,s
– символическая ссылка и т. д.)
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -name "*.svg"
./content/docs/latex/pdfpages/adobe-pdf-icon.svg
./content/docs/latex/pdfpages/adobe-pdf-2.svg
./content/docs/linux/ssh/ssh.svg
./themes/hugo-theme-relearn/exampleSite/static/images/logo.svg
.
— это поиск в текущей директории
-name
— ищем файлы с именами по шаблону
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find config -type d
config
config/_default
выведем только директории в каталоге config
Работа со временем
-amin, -anewer, -atime
: — проверяет последние изменения в файлах-cmin, -cnewer, -ctime
: — проверяет время создания файлов относительно времени другого файла-mmin, -mnewer, -mtime
: — проверяет время последнего изменения файла-newer
: — сравнивает файлы новее исходного
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -name "*.png" -ctime -2
./public/docs/emacs/yasnippet/logo.png
./public/docs/emacs/magit/magit.png
./public/docs/latex/newfont/121751.png
./public/docs/latex/pdfpages/adobe.png
./public/docs/latex/titleps/131227.png
./public/docs/latex/titlesec/101100.png
./public/docs/latex/titlesec/101034.png
./public/docs/latex/titlesec/101112.png
вывести все файлы с расширением .png
, созданные в течение последних двух дней
─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -newer ./public/docs/linux/ssh/ssh.png
./public
./public/tags/index.html
./public/tags/index.xml
./public/tags/documentation/index.html
./public/tags/documentation/index.xml
./public/tags/soft/index.html
вывести все файлы, которые новее ssh.png
Поиск по свойствам файлов
-perm
: поиск по правам доступа файла-size
: поиск по размеру файла
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -perm 777
./assets/images/big.jpg
./assets/images/width-title.jpg
./assets/images/logo.png
поиск всех файлов с правами 777
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -size 2M
./assets/images/ig.png
./themes/hugo-theme-relearn/exampleSite/content/introduction/quickstart/magic.gif
./themes/hugo-theme-relearn/static/js/mathjax/mml-svg.js
поиск файлов размером больше 2М
Действия над найденными файлами
-ls
: выводит результат в форматеls
-print, -print0, -printf
: вывод результата в стандартный поток вывода-fprint, -fprint0, -fprintf
: вывод результата в файл
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -name "ssh*" -ls
502782 0 drwxr-xr-x 1 edge edge 62 ноя 15 17:44 ./content/docs/linux/ssh
502783 8 -rw-r--r-- 1 edge edge 7865 ноя 13 11:52 ./content/docs/linux/ssh/ssh.svg
502784 136 -rw-r--r-- 1 edge edge 136846 ноя 13 11:53 ./content/docs/linux/ssh/ssh.png
502907 0 drwxr-xr-x 1 edge edge 70 ноя 14 17:55 ./public/ru/docs/linux/ssh
502853 0 drwxr-xr-x 1 edge edge 114 ноя 14 19:42 ./public/docs/linux/ssh
502854 136 -rw-r--r-- 1 edge edge 136846 ноя 17 19:26 ./public/docs/linux/ssh/ssh.png
502855 8 -rw-r--r-- 1 edge edge 7865 ноя 17 19:26 ./public/docs/linux/ssh/ssh.svg
выводит все файлы, где в имени есть ssh
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -name "ssh*" -printf '%s %p\n'
62 ./content/docs/linux/ssh
7865 ./content/docs/linux/ssh/ssh.svg
136846 ./content/docs/linux/ssh/ssh.png
70 ./public/ru/docs/linux/ssh
114 ./public/docs/linux/ssh
136846 ./public/docs/linux/ssh/ssh.png
7865 ./public/docs/linux/ssh/ssh.svg
выводит только размер и имя
-delete
: удаляет все найденные файлы-exec
: выполняет любую команду над результатом поиска
find /tmp -name "*.tmp" -delete
удалит все файлы с расширением tmp
─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -name "*.yaml" -type f -exec grep -l doc {} \;
./themes/hugo-theme-relearn/.github/actions/release_milestone/action.yaml
./themes/hugo-theme-relearn/.github/workflows/docs-build-deployment.yaml
./themes/hugo-theme-relearn/.github/workflows/docs-build.yaml
найдет все файлы с расширением yaml
в которых есть слово doc
-exec
обязательно поставить {}
— результат выборки и в самом конце \;
чтобы команда выполнилась над файлом 1 раз, если использовать +
то в grep
, будут переданы несколько файлов.
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find . -name "*.yaml" -type f | xargs grep -l doc
./themes/hugo-theme-relearn/.github/actions/release_milestone/action.yaml
./themes/hugo-theme-relearn/.github/workflows/docs-build-deployment.yaml
./themes/hugo-theme-relearn/.github/workflows/docs-build.yaml
это альтернативная команда xargs
вместо exec
. Получает на вход результат find
и выполняет свою команду.
Операторы Find
Операторы можно комбинировать как обычные логические выражения
(expr): это обычные круглые скобки
!, -not: оператор отрицания НЕТ
-a, -and: оператор логическое И
-o, -or: оператор логическое ИЛИ
Расширенные параметры
find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path] [expressions]
H, L, P
— порядок обработки символических ссылокO
— уровень оптимизации от 0 до 3D
— диагностическая информация
REGEX
find [path] [expression]
Этот раздел посвящен простому слову в команде exptession
find [path] -regex [regular_expression]
Будет выполнен поиск по указанному пути и возвращен список файлов, удовлетворяющих условию.
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find ./ -type f -regex '.*css\/*'
./themes/hugo-theme-relearn/assets/css/auto.css
./themes/hugo-theme-relearn/assets/css/chroma-learn.css
./themes/hugo-theme-relearn/assets/css/chroma-neon.css
./themes/hugo-theme-relearn/assets/css/chroma-relearn-dark.css
./themes/hugo-theme-relearn/assets/css/chroma-relearn-light.css
./themes/hugo-theme-relearn/assets/css/format-print.css
выдал все файлы в которых есть в наименовании css/
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘
╰$ find ./ -type f -regex '.*neon.*'
./themes/hugo-theme-relearn/assets/css/chroma-neon.css
./themes/hugo-theme-relearn/assets/css/theme-neon.css
./public/css/theme-neon.css
./public/css/chroma-neon.css
а в этом запросе должен быть neon
Команда -iregex
find [path] -iregex [regular_expression]
почти тоже самое, только с регистронезависимым поиском. Будет искать и большие и маленькие буквы.
Команда -regextype
Выбирает тип регулярного выражения
- findutils
- emacs — установлено по умолчанию
- gnu-awk
- grep
- egrep
- posix-awk
- posix-basic
- posix-egrep
- posix-extended
На этой странице есть описание всех синтаксисов регулярных выражений
“https://www.gnu.org/software/findutils/manual/html_node/find_html/Regular-Expressions.html" “https://www.gnu.org/software/findutils/manual/html_node/find_html/Regular-Expressions.html"