Ответы:
Используйте find для этого:
find . -name "foo*"
find
нужна начальная точка, а .
(точка) указывает на текущий каталог.
find . foo*
, то foo*
были бы расширены и затем переданы, чтобы найти.
" "
это очень необходимо для рекурсивного поиска.
find . -name "foo*" 2>/dev/null
Поиск труб в grep часто более удобен; это дает вам полную силу регулярных выражений для произвольного сопоставления с подстановочными знаками.
Например, чтобы найти все файлы с нечувствительной к регистру строкой «foo» в имени файла:
~$ find . -print | grep -i foo
find
также имеют -iname
, -regex
и -iregex
флаги для регистронезависимого шаблона, регулярного выражения, и нечувствительных к регистру сопоставления регулярных выражений, так обжигающе к grep
ненужно.
find
командой, поддерживающей эти параметры. Иногда grep
становится единственным вариантом.
find
найдет все файлы, которые соответствуют шаблону:
find . -name "*foo"
Однако, если вы хотите картинку:
tree -P "*foo"
Надеюсь это поможет!
brew install tree
для пользователей Mac OSX без apt-get
установки
find -L . -name "foo*"
В некоторых случаях мне понадобился параметр -L для обработки символических ссылок на каталоги. По умолчанию символические ссылки игнорируются. В этих случаях это было довольно странно, так как я менял каталог на подкаталог и смотрел файл, соответствующий шаблону, но команда find не возвращала имя файла. Использование -L решает эту проблему. Варианты символьной ссылки для поиска: -P -L -H
Если ваша оболочка поддерживает новую опцию globbing (может быть включена с помощью :)shopt -s globstar
, вы можете использовать:
echo **/*foo*
найти любые файлы или папки рекурсивно. Это поддерживается Bash 4, zsh и аналогичными оболочками.
Лично я определил эту функцию оболочки:
f() { find . -name "*$1*"; }
Примечание. Над строкой можно вставить непосредственно в оболочку или добавить в ~/.bashrc
файл вашего пользователя .
Затем я могу искать любые файлы, набрав:
f some_name
В качестве альтернативы вы можете использовать fd
утилиту с простым синтаксисом, например fd pattern
.
shopt -s globstar
командой. Это поддерживается в Bash, Zsh и аналогичных оболочках.
bash-3.2$ shopt -s globstar
даетbash: shopt: globstar: invalid shell option name
fd
В случае, если find
это слишком медленно, попробуйте fd
утилиту - простую и быструю альтернативу find
написанному на Rust.
Синтаксис:
fd PATTERN
Демо-версия:
Домашняя страница: https://github.com/sharkdp/fd
asciicast2vector
можно использовать.
find <directory_path> -type f -name "<wildcard-match>"
В подстановочном знаке вы можете указать строку, которую хотите сопоставить, например * .c (для всех файлов c)
Ты можешь использовать:
# find . -type f -name 'text_for_search'
Если вы хотите использовать REGX, используйте -iname
# find . -type f -iname 'text_for_search'
Способ поиска рекурсивного файла по умолчанию, доступный в большинстве случаев,
find . -name "filepattern"
Он начинает рекурсивный обход имени файла или шаблона из текущего каталога, в котором вы находитесь. С помощью команды find вы можете использовать подстановочные знаки и различные ключи, чтобы увидеть полный список опций, наберите
man find
или если справочные страницы недоступны в вашей системе
find --help
Однако, есть более современные и более быстрые инструменты, чем поиск, которые пересекают всю вашу файловую систему и индексируют ваши файлы, одним из таких распространенных инструментов является locate или slocate / mlocate, вы должны проверить руководство вашей ОС, как его установить, и как только Для установки необходимо запустить базу данных, если сценарий установки не делает этого за вас, это можно сделать вручную, набрав
sudo updatedb
И, чтобы использовать его для поиска определенного типа файла
locate filename
Или, чтобы найти имя файла или шаблон из текущего каталога, вы можете набрать:
pwd | xargs -n 1 -I {} locate "filepattern"
Он просмотрит свою базу данных файлов и быстро распечатает имена путей, которые соответствуют введенному вами шаблону. Чтобы увидеть полный список параметров поиска, введите:
locate --help
илиman locate
Кроме того, вы можете настроить locate для обновления его базы данных в запланированное время с помощью задания cron, поэтому пример cron, который обновляет db в 1:00, будет выглядеть так:
0 1 * * * updatedb
Эти задания cron должны быть настроены пользователем root, так как updatedb требует привилегий root для обхода всей файловой системы.
Я удивлен, увидев, что locate не используется интенсивно, когда мы должны идти рекурсивно.
Сначала я должен найти «$ PWD», чтобы получить список файлов в текущей интересующей папке, а затем запустить greps для них, как мне будет угодно.
locate "$PWD" | grep -P <pattern>
Конечно, это предполагает, что updatedb выполнен, и индекс периодически обновляется. Это гораздо более быстрый способ найти файлы, чем запустить поиск и попросить его перейти по дереву. Упомяну это для полноты. Ничего против использования find, если дерево не очень тяжелое.
locate "$PWD*.mp4"
Просто чтобы напомнить, что вы можете пропуститьgrep
Команда ниже помогает искать любые файлы
1) Независимо от случая
2) Результат Исключение папок без разрешения
3) Поиск в корне или по нужному пути. Изменить / с пути, который вы предпочитаете.
Синтаксис:
find -iname '' 2> & 1 | Пример grep -v "Отказано в доступе"
find / -iname 'C * .xml' 2> & 1 | grep -v "В доступе отказано"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null
Если вы хотите найти специальный файл с подстановочными знаками, вы можете использовать следующий код:
find . -type f -name "*.conf"
Предположим, вы хотите искать все файлы .conf здесь:
.
означает, что поиск начался отсюда (текущее место)
-type
означает тип элемента поиска, который здесь является файлом (f).
-name
означает, что вы хотите искать файлы с именами * .conf .
использование
find path/to/dir -name "*.ext1" -o -name "*.ext2"
объяснение
find
рекурсия.-o
Означает -or
. Так что выше означает поиск этого шаблона или этого. Если у вас есть только один шаблон, то нет необходимости-o
.