Как я могу рекурсивно найти все файлы в текущих и подпапках на основе подстановочных знаков?
Используйте find для этого:
find . -name "foo*"
find
нужна отправная точка, а .
(точка) указывает на текущий каталог.
Трубопроводная находка в грипе часто удобнее; это дает вам полную мощность регулярных выражений для произвольного подстановочного знака.
Например, чтобы найти все файлы с нечувствительной к регистру строкой «foo» в имени файла:
~$ find . -print | grep -i foo
find
найдет все файлы, которые соответствуют шаблону:
find . -name "*foo"
Однако, если вы хотите изображение:
tree -P "*foo"
Надеюсь, это поможет!
find -L . -name "foo*"
В некоторых случаях мне нужен параметр -L для обработки символических ссылок на каталоги. По умолчанию символические ссылки игнорируются. В этих случаях это было довольно запутанно, так как я бы изменил каталог на подкаталог и увидел бы файл, соответствующий шаблону, но find не вернул бы имя файла. Использование -L решает эту проблему. Варианты символической ссылки для поиска -P -L -H
Если ваша оболочка поддерживает новый параметр глобуса (может быть включен: shopt -s globstar
), вы можете использовать:
echo **/*foo*
найти какие-либо файлы или папки рекурсивно. Это поддерживается Bash 4, zsh и подобными оболочками.
Лично у меня есть эта функция оболочки:
f() { find . -name "*$1*"; }
Примечание. Вышеуказанную строку можно вставить непосредственно в оболочку или добавить в файл ~/.bashrc
вашего пользователя.& Лт; / sup >
Затем я могу искать любые файлы, набрав:
f some_name
В качестве альтернативы вы можете использовать утилиту fd
с простым синтаксисом, например,. FD шаблон
.
fd
Если find
слишком медленный, попробуйте утилиту fd
- простую и быструю альтернативу find
, написанному в Rust.
Синтаксис:
fd PATTERN
Демо:
[](https://github.com/sharkdp/fd/raw/master/doc/screencast.svg!дезинфицировать = правда)? Домашняя страница: < https://github.com/sharkdp/fd>
Вы можете использовать:
& Лт;!- язык-все: нет - >
# find . -type f -name 'text_for_search'
Если вы хотите использовать REGX, используйте -iname
# find . -type f -iname 'text_for_search'
По умолчанию используется способ поиска рекурсивного файла, который в большинстве случаев доступен
find . -name "filepattern"
Он начинает рекурсивное пересечение имени файла или шаблона из текущего каталога, в котором вы находитесь. С помощью команды find вы можете использовать подстановочные знаки и различные переключатели, чтобы увидеть полный список параметров, введите
man find
или если мужские страницы недоступны в вашей системе
find --help
Однако, есть более современные и более быстрые инструменты, чем найти, которые проходят через всю вашу файловую систему и индексируют ваши файлы, один из таких распространенных инструментов - найти или выбить / выбить, Вы должны проверить руководство по вашей ОС, как ее установить, и однажды это 's установлен, он должен инициировать базу данных, если установить скрипт дон 'не делай это для тебя, это можно сделать вручную, набрав
sudo updatedb
И использовать его для поиска определенного типа файла
locate filename
Или, чтобы найти имя файла или скороговорку из текущего каталога, вы можете ввести:
pwd | xargs -n 1 -I {} locate "filepattern"
Он просматривает свою базу данных файлов и быстро распечатывает имена путей, которые соответствуют шаблону, который вы набрали.
Чтобы увидеть полный список параметров locate, введите:
locate --help
или man locate
Кроме того, вы можете настроить местоположение, чтобы обновлять его базу данных в запланированные сроки с помощью задания cron, поэтому пример cron, который обновляет db в 1AM, будет выглядеть следующим образом:
0 1 * * * updatedb
Эти задания cron необходимо настроить пользователем root, поскольку updatedb требуется привилегия root для прохождения всей файловой системы.
Ниже команда помогает искать любые файлы
найти / -iname 'C * .xml' 2 > & 1 | grep -v "Разрешение отказано"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
Следующая команда будет перечислять все файлы с точным именем «pattern» (например) в текущих и его подпапках.
find ./ -имя "шаблон"
Если вы хотите искать специальный файл с подстановочным знаком, вы можете использовать следующий код:
find . -type f -name "*.conf"
Предположим, вы хотите искать все файлы .conf отсюда:
.
означает поиск, начатый отсюда (текущее место)
-type
означает тип элемента поиска, который здесь является файлом (f).
-name
означает, что вы хотите искать файлы с именами *. Conf .
Я удивлен, увидев, что локация не используется сильно, когда мы должны идти рекурсивно.
Сначала я бы сделал «$ PWD», чтобы получить список файлов в текущей интересующей папке, а затем запускать greps на них, как мне угодно.
locate "$PWD" | grep -P <pattern>
Конечно, это предполагает, что updatedb сделан, и индекс периодически обновляется. Это гораздо более быстрый способ найти файлы, чем запустить поиск и попросить его спуститься по дереву. Упоминание об этом для полноты. Ничего против использования найти, если дерево не очень тяжелое.