Команда для поиска файлов путем поиска только часть их имен?

Скажем, есть файлы с именами:

batman.c
debate.c
cricketbat.c

Какая команда и как ее использовать, чтобы вывести список всех этих файлов с помощью тега поиска bat?

32
задан 27 July 2016 в 15:07

6 ответов

Нахождение файлов с 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 и другие способы найти файлы, см.:

47
ответ дан 27 July 2016 в 15:07

Самый легкий путь состоит в том, чтобы работать

locate bat

Этот способ, которым можно перерыть целый компьютер для файлов, содержащих "летучую мышь" в имени файла

Для обновления, список файлов на ПК работает

updatedb

Выполнение эта команда, когда Вы недавно добавили новые файлы к своей учетной записи

0
ответ дан 27 July 2016 в 15:07

Откройте терминал и каталоги изменения к каталогу от того, где Вы хотите начать искать и затем выполнять эту команду:

find . -name "*bat*" -type f 

Эти . запускает команду находки с текущего каталога.
-name соответствия строка bat и чувствительно к регистру. (-iname нечувствительно к регистру)
-type f поиски файлов только.

0
ответ дан 27 July 2016 в 15:07

Если файлы находятся в употреблении текущего каталога:

$ 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
0
ответ дан 27 July 2016 в 15:07

Вы хотите использовать эти find команда, с -iname опция для нечувствительного к регистру соответствия имени файла, или -name опция для чувствительных к регистру соответствий имени файла. Оба из них позволят Вам использовать подстановочные имена. Так, для нахождения любых имен файлов, которые содержат "биту", которую Вы использовали бы:

find / -iname '*bat*'

Или

find / -name '*bat*'

Эти * означает "любой символ (символы)", таким образом, поиск ищет bat с любыми символами, включая ни один, прежде или после него. / поиски от корневого каталога рекурсивно, можно использовать ., который будет искать рекурсивно из текущего каталога или полного пути для того, откуда Вы хотите искать. Смотрите на как поиск файлов с помощью regex в сценарии оболочки

Linux
0
ответ дан 27 July 2016 в 15:07

Используйте старое доброе 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.
0
ответ дан 27 July 2016 в 15:07

Другие вопросы по тегам:

Похожие вопросы: