Скажем, есть файлы с именами:
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.Вы хотите перечислить соответствующие файлы только в текущем каталоге? в любом каталоге на уровне или ниже текущего каталога? где-нибудь в системе?