Скажем, есть файлы с именами:
batman.cdebate.ccricketbat.c
Какую команду и как я должен использовать, чтобы перечислить все эти файлы с помощью поискового тега bat
?
Скажем, есть файлы с именами:
batman.cdebate.ccricketbat.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 файл
.
Для получения дополнительной информации о find
и другие способы поиска файлов см.:
find
страница руководства, доступный онлайн или запустив man find
в терминале.find
, locate
, и xargs
коммунальные услуги.Самый простой способ - это запустить
locate bat
Таким образом, вы можете искать по всему компьютеру файлы, содержащие "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.cbatman.cbatwoman.ccricketbat.c
Если вы хотите выполнить поиск этих файлов в системе, используйте:
$ find / -name "*bat*"/path/to/cricketbat.c/path/to/batgirl.c/path/to/batwoman.c/path/to/batman.c
Вы хотите использовать find
команда, с помощью -iname
опция для сопоставления имен файлов без учета регистра или -name
опция для сопоставления имен файлов с учетом регистра. Оба они позволят вам использовать имена с подстановочными знаками. Итак, чтобы найти любые имена файлов, содержащие "bat", вы бы использовали:
find / -iname '*bat*'
Или
find / -name '*bat*'
То *
означает "любой символ (ы)", поэтому поиск ищет bat
с любыми символами, включая ни одного, до или после него. То /
выполняет рекурсивный поиск в корневом каталоге, вы можете использовать .
который будет выполнять рекурсивный поиск из текущего каталога или по абсолютному пути к тому месту, откуда вы хотите выполнить поиск.Взгляните на как искать файлы с помощью регулярных выражений в скрипте оболочки linux
Используйте старый добрый 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.
Вы хотите перечислить соответствующие файлы только в текущем каталоге? в любом каталоге на уровне или ниже текущего каталога? где-нибудь в системе?