Скажем, есть файлы с именами:
batman.c
debate.c
cricketbat.c
Какую команду и как я должен использовать ее, чтобы перечислить все эти файлы с помощью тега поиска bat
?
command-line
files
search
find
srk_cb
источник
источник
Ответы:
Поиск файлов в
bat
любом местеЧтобы найти все файлы внутри,
/path/to/folder
чьи имена содержатbat
, вы можете использовать:Я цитировал шаблон поиска ,
*bat*
потому что, если котировки были опущены и файлы совпадают*bat*
в текущем каталоге, то оболочка будет расширяться*bat*
в их список и передать , что кfind
. Тогдаfind
не будет работать правильно. (\*bat\*
а"*bat*"
также работа.)Для поиска в папке, в которой вы находитесь (например, в которой вы редактировали
cd
), используйте.
, как обычно:Для поиска по всему компьютеру используйте
/
. Для поиска в вашем домашнем каталоге используйте~
или полное имя вашего домашнего каталога. ( Оболочка расширяется~
до полного пути вашего домашнего каталога.)Расширение или сужение поиска по имени
Если вы хотите найти регистронезависимо, поэтому файлы , содержащие
BAT
,bAt
и так далее подбираются, используйте-iname
тест вместо-name
теста:Я заметил, что все ваши файлы заканчиваются
.c
. Если вы хотите найти только такие файлы, используйте:Я заметил, что все ваши имена файлов имеют
bat
либо в самом начале, либо в самом конце части, предшествующей.c
суффиксу. Если вы хотите избежать совпадения файлов, напримерembattled.c
, вы можете использовать:-o
это оператор или .Соответствие только файлам
Вы можете использовать только обычные файлы, а не папки, символические ссылки и специальные узлы устройств
-type f
. Это часто рекомендуется, а иногда и вполне уместно ... но часто это не то, что вам действительно нужно , особенно если вы работаетеfind
с целью самостоятельно проверить результаты. Если бы у вас была символическая ссылка, которая соответствовала вашему запросу, разве вы не хотели бы знать об этом?Если вы хотите найти как обычные файлы, так и символические ссылки, вы можете использовать:
При этом
-o
для группировки используется оператор, а также скобки (которые должны быть заключены в кавычки, чтобы оболочка не обращалась с ними особо; в противном случае вы получите синтаксическую ошибку).Но предположим, что вы хотите видеть только символические ссылки, которые в конечном итоге указывают на обычный файл (а не символические ссылки на каталоги, узлы устройств и т. Д.). Это на самом деле еще проще: использовать
-xtype
вместо-type
. При условии, что вы не запускаетеfind
с-L
флагом,-xtype
на символической ссылке проверяется тип файла, на который указывает ссылка.Если у вас есть символическая ссылка на другую символическую ссылку на файл, она
-xtype f
будет соответствовать ей, даже если ее прямой целью является другая символическая ссылка, а не обычный файл. Это почти всегда то, что вы хотите.Часто люди думают, что хотят
-type f
, но на самом деле они хотят-xtype f
.Получение подробного вывода
find
действие по умолчанию, если вы не указали его-print
. Все команды, приведенные выше, эквивалентны самим себе с-print
прикрепленным в конце.find
часто используется для запуска команд на основе найденных файлов - часто это команды, которые вносят изменения. Но есть и другие действия, целью которых, кроме всего прочего, является отображение результатов-print
. Особый интерес представляет-ls
:Это дает подробную информацию о каждом файле в многостолбцовом формате, аналогично (хотя и не совсем такому) тому, что вы увидите при запуске .
ls file
Дальнейшее чтение
Для получения дополнительной информации
find
и других способов поиска файлов см .:find
справочника , доступная онлайн илиman find
через терминал.find
,locate
иxargs
коммунальные услуги.источник
-xtype
совет; возможноls *bat*
и-maxdepth
/mindepth
также стоит упомянуть.ls
уже, я сосредоточился на рекурсивном случае сfind
здесь. Конечно, также был бы полезен подробный ответ, охватывающий не (или менее) -рекурсивный список имен файлов, соответствующих некоторому шаблону (ls
иfind
с-maxdepth
). Возможно, вы захотите опубликовать такой ответ!Самый простой способ - бежать
Таким образом, вы можете искать на всем компьютере файлы, содержащие «bat» в имени файла.
Чтобы обновить список файлов на вашем компьютере, запустите
Запустите эту команду, если вы недавно добавили новые файлы в свою учетную запись
источник
updatetdb
updatedb
выполнялись вручную или автоматически),sudo updatedb
сначала нужно будет запустить их, да.bat
.find /
приlocate
поиске в базе данных, в то время какfind
рекурсивно перечисляет,/
а затем соответствует регулярному выражению.Откройте терминал и измените каталоги на каталог, откуда вы хотите начать поиск, а затем выполните эту команду:
.
Начинает команды поиска из текущего каталога.Соответствует
-name
строкеbat
и чувствителен к регистру. (-iname
Чувствителен к регистру)В
-type f
поиск файлов только.источник
Если файлы находятся в текущем каталоге, используйте:
Или (чтобы они были построчно):
Если вы хотите найти в системе эти файлы, используйте:
источник
Вы хотите использовать
find
команду с-iname
опцией сопоставления имен файлов без учета регистра или-name
опцией сопоставления имен файлов с учетом регистра. Оба из них позволят вам использовать подстановочные имена. Итак, чтобы найти любые имена файлов, которые содержат «bat», вы должны использовать:Или
В
*
означает «любой символ (ы)», поэтому поиск ищетbat
с любыми символами, не включая ни одного, до или после него. В/
поиск из корневого каталога рекурсивно, вы можете использовать ,.
который будет искать рекурсивно из текущего каталога или абсолютный путь для того, где вы хотите , чтобы найти. Посмотрите, как искать файлы с помощью регулярных выражений в сценарии оболочки Linux.источник
-type f
, которое делает больше, чем просто исключает каталоги, и зачастую это не то, что пользователи действительно хотят .Используйте старый добрый
find
.например.:
от
man find
:источник