Как искать файлы с Linux?

19481
Niklas Rosencrantz

Знаете ли вы хороший способ найти файл или контент по имени, рекурсивно похожий на поиск функции ms-windows в Linux? Я могу find . | grep test.htmlподозревать, что это не самое лучшее. Спасибо за любой ответ.

Например, запуск find . | grep terms.htmlдает ожидаемый результат locate terms.html, хотя при этом locate не получает обновленную базу данных - возможно, это связано с тем, что на USB-карте находится файл?

3

8 ответов на вопрос

13
rapadura

Команда найти, как это

 find . -iname '*hellofiles*' 

вы говорите, что find · location · -iname означает, что регистр не учитывается, а в '' это регулярное выражение, если хотите.

find / home / user -iname '* zip' найдет вам все zip-файлы в / home / user

Если вы хотите более быстрый поиск, вы можете использовать locate, есть утилита, которая сканирует диск регулярно, как каждую неделю или день, в зависимости от того, как он настроен.

locate myfile 

и он будет смотреть в базе данных, если updatedb где-нибудь видел myfile.

Это помогло мне много раз, а не найти Niklas Rosencrantz 12 лет назад 0
2
andymnc

В случае пакетов: dpkg -L имя_пакета

или если вы знаете, что он находится в определенной папке, добавьте использование grep, например:

dpkg -L имя_пакета | grep foldername

Например, вы только что установили Chromium и вам нужно знать, где находится корзина

dpkg -L хром-браузер | grep bin

1
Grammin

find ./ -name "filename"или вы можете сделать что-то вроде find ./ -name "*.jar"поиска всех файлов с расширением .jar. Вы также find ./ -name "*.jar" | xargs grep -n 'main'можете найти все файлы .jar, в которых есть основной файл.

1
Will

find . -name test.html или вы можете использовать шаблоны: find . -name \*test.html

1
peoro

Вы можете использовать команду find, если вы хотите сделать это через терминал.

Конвейерная обработка findи grepбудет работать, в противном случае findпредоставляет себе несколько вариантов (например, -nameи -iname), чтобы сделать это:

find DIRECTORY -name test.html 
1
jonescb

Есть две утилиты findи locate. Поскольку другие предложили find, я буду говорить о locate.

Вы устанавливаете пакет с именем mlocateили slocateв старых системах. После установки запустите команду updatedb. locateиспользует базу данных для хранения пути ко всем вашим файлам, поэтому поиск выполняется намного быстрее, но его недостатком является частое устаревание, а заполнение базы данных может занять пару минут.

Если у вас есть база данных, населенные просто запустите: locate file. Если вы просто используете имя файла, он будет искать этот файл, начиная с /. Таким образом, вы могли бы получить /etc/fileи /usr/share/file. Если вы хотите просто ограничить его своим домашним каталогом, используйте это:

 locate file | grep /home/user 

Подстановочные знаки не работают locateпо любой причине.

`locate 'делает глобусы оболочки, также называемые подстановочными знаками. Возможно, вам придется процитировать свой шаблон тогда. Вы также можете использовать флаг `-r` для использования регулярных выражений. Rich Homolka 13 лет назад 1
1

Я не знаю функцию поиска Windows, но когда вы ищете альтернативу | grep * тогда вы можете попробовать:

find /* -name "keyword" 

slocate также должен соответствовать вашим критериям.

С уважением, / Dley

1
thkala

findимеет ряд опций, которые позволяют ему находить файлы по имени, регулярным выражениям или даже более сложным критериям, таким как размер или принадлежность. Например

find . -iname '*.txt' 

См. Также раздел с примерами на связанной странице руководства.

Тем не менее, findимеет явный недостаток поиска файловой системы каждый раз, когда вы вызываете ее. С locateдругой стороны, утилита во многих своих вариантах использует регулярно обновляемую базу данных файлов в вашей системе.

Спасибо! Команда `найти. -iname privacy.html` дает ожидаемый результат, а locate - нет (это файл privacy.html, который я запустил на USB-накопителе) Niklas Rosencrantz 12 лет назад 0

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