Скажем, есть файлы с именами:
batman.c
debate.c
cricketbat.c
Какая команда и как ее использовать, чтобы вывести список всех этих файлов с помощью тега поиска bat
?
bat
Где угодноНайти все файлы где угодно внутри /path/to/folder
чьи имена содержат bat
, можно использовать:
find /path/to/folder -name '*bat*'
Я заключил шаблон поиска в кавычки *bat*
потому что, если кавычки были опущены и соответствие файлов *bat*
в текущем каталоге расширится оболочка *bat*
в список их и передачи это к find
. Затем find
не работал бы правильно. (\*bat\*
и "*bat*"
также работа.)
Для поиска в папке, Вы в настоящее время находитесь в (например, который Вы имеете cd
редактор к), использовать .
, как обычно:
find . -name '*bat*'
Для поиска целого компьютера использовать /
. Для поиска корневого каталога использовать ~
, или полное имя Вашего корневого каталога. (Оболочка расширяется ~
к полностью определенному пути Вашего корневого каталога.)
Если Вы хотите искать нечувствительно к регистру, так файлы, содержащие BAT
, bAt
, и т.д подобраны, используют -iname
тест вместо -name
тест:
find /path/to/folder -iname '*bat*'
Я заметил весь Ваш конец файлов в .c
. Если Вы только хотите найти файлы как этот, используйте:
find /path/to/folder -name '*bat*.c'
Я заметил, что все Ваши имена файлов имеют bat
или в самом начале или в самом конце части, предшествующей .c
суффикс. Если Вы не хотите соответствовать файлам как embattled.c
, Вы могли использовать:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
или оператор.
Для нахождения только регулярных файлов - и не папок символьных ссылок и узлов специального устройства - можно использовать -type f
. Это часто рекомендуется и иногда довольно соответствующее..., но часто не, что Вы действительно хотите, особенно если Вы работаете find
в целях исследования вывода самостоятельно. Если бы у Вас была символьная ссылка, которая соответствовала Вашему поиску, то разве Вы не хотели бы знать об этом?
Если Вы хотите найти и регулярные файлы и символьные ссылки, можно использовать:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Это использует -o
оператор и также круглые скобки для группировки (то, которое должно быть заключено в кавычки так оболочка, не рассматривает их особенно; иначе Вы получите синтаксическую ошибку).
Но предположите, что Вы только хотите видеть символьные ссылки, которые в конечном счете указывают на регулярный файл (и не символьные ссылки на каталоги, узлы устройства, и т.д.). Это на самом деле еще более просто: использовать -xtype
вместо -type
. Если Вы не работаете find
с -L
флаг, -xtype
на тестах символьной ссылки тип файла ссылка указывает на.
find /path/to/folder -name '*bat*' -xtype f
Если у Вас есть символьная ссылка на другую символьную ссылку на файл, -xtype f
будет соответствовать ему даже при том, что его прямая цель является другой символьной ссылкой, а не регулярным файлом. Это почти всегда, что Вы хотите.
Часто люди думают, что хотят -type f
, но действительно они хотят -xtype f
.
find
действие по умолчанию, если Вы не указываете, что каждый -print
. Все команды, данные выше, эквивалентны себе с -print
прикрепляемый на в конце.
find
часто привык к командам выполнения на основе найденных файлов - часто, команды, которые вносят изменения. Но существуют также другие действия, цель которых состоит в том, чтобы отобразить результаты, кроме того -print
. Особенно интересный -ls
:
find /path/to/folder -name '*bat*' -ls
Это дает подробную информацию о каждом файле, в табличном формате, подобном (хотя не совсем то же как), что Вы видели бы путем выполнения ls file
.
Для получения дополнительной информации о find
и другие способы найти файлы, см.:
find
страница руководства, доступная онлайн или путем выполнения man find
в терминале.find
, locate
, и xargs
утилиты.Самый легкий путь состоит в том, чтобы работать
locate bat
Этот способ, которым можно перерыть целый компьютер для файлов, содержащих "летучую мышь" в имени файла
Для обновления, список файлов на ПК работает
updatedb
Выполнение эта команда, когда Вы недавно добавили новые файлы к своей учетной записи
Откройте терминал и каталоги изменения к каталогу от того, где Вы хотите начать искать и затем выполнять эту команду:
find . -name "*bat*" -type f
Эти .
запускает команду находки с текущего каталога.
-name
соответствия строка bat
и чувствительно к регистру. (-iname
нечувствительно к регистру)
-type f
поиски файлов только.
Если файлы находятся в употреблении текущего каталога:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Или (для имения их линию за линией):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
, Если Вы хотите искать систему это файлы, используйте:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Вы хотите использовать эти find
команда, с -iname
опция для нечувствительного к регистру соответствия имени файла, или -name
опция для чувствительных к регистру соответствий имени файла. Оба из них позволят Вам использовать подстановочные имена. Так, для нахождения любых имен файлов, которые содержат "биту", которую Вы использовали бы:
find / -iname '*bat*'
Или
find / -name '*bat*'
Эти *
означает "любой символ (символы)", таким образом, поиск ищет bat
с любыми символами, включая ни один, прежде или после него. /
поиски от корневого каталога рекурсивно, можно использовать .
, который будет искать рекурсивно из текущего каталога или полного пути для того, откуда Вы хотите искать. Смотрите на как поиск файлов с помощью regex в сценарии оболочки
Используйте старое доброе find
.
find <path_for_search> -type f -iname "*bat*"
, например:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
от man find
:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.