Как выполнить поиск всех файлов, начинающихся с имени "ABC" в каталоге?

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

Чтобы дополнить существующие ответы:

ls

Утилита списка каталогов по умолчанию ls может использоваться в сочетании с подстановочными знаками оболочки . Для поиска всех файлов с шаблоном abc:

ls -d abc*   # list all files starting with abc---ls -d *abc*  # list all files containing --abc--ls -d *abc   # list all files ending with --abc

Обратите внимание, что расширение файла также имеет отношение к результатам поиска.


tree

В случае, если нам нужно перечислить файлы в дереве каталогов, мы также можем выдать tree для поиска заданного шаблон любить:

tree -P 'abc*'  # list directory tree of file starting with abc---tree -l 'def*'  # exclude files starting with def---

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

Вы можете использовать find команда для поиска файлов с шаблоном

find . -type f -name "abc*" 

Приведенная выше команда выполнит поиск файла, начинающегося с abc, в текущем рабочем каталоге.

-name 'abc' будет перечислен список файлов, которые точно совпадают. Например: abc

Вы также можете использовать

 -iname -regex 

вариант с find команда для поиска имени файла с использованием шаблона

Есть много способов сделать это, в зависимости от того, что именно вы хотите с ними сделать. Как правило, если вы хотите просто перечислить их, вы можете сделать это в терминале, используя:

find | grep '^\./ABC'

... и замена ABC с вашим текстом.

Чтобы понять команду, давайте немного разберем ее:

  • find перечисляет все файлы в текущем каталоге и его подкаталогах; при использовании его в одиночку будет просто перечислено все, что там есть. Обратите внимание, что find выводит каждый файл или каталог, начинающийся с ./, указывающий, что их путь относится к текущему каталогу. Осознавать это важно, потому что это означает, что мы будем искать результаты, начиная с ./ABC и не только ABC.

  • Характер трубы | перенаправляет вывод одной команды на другую, в данном случае вывод find перенаправляется на grep. Это называется трубопроводом.

  • grep принимает выходные данные и фильтрует их, используя заданный шаблон, ^\./ABC.

    • Обратите внимание, что шаблон заключен в одинарные кавычки ' ' чтобы оболочка не интерпретировала специальные символы внутри нее.
  • Теперь сам шаблон написан в определенном синтаксисе, называемом обычное выражение, или регулярное выражение для краткости. Регулярное выражение - чрезвычайно мощный инструмент поиска, если вы его освоите, и есть такие сайты, как этот которые расскажут вам об этом более подробно, но обратите внимание, что grep это не полноценный движок регулярных выражений, и вы не можете делать с ним все.

  • Для нашей цели:

    • ^ в регулярном выражении соответствует началу строки; это предотвращает его соответствие шаблону, если он не встречается в начале имени файла.

    • . в регулярном выражении тоже есть особое значение: оно означает "сопоставьте здесь любой отдельный символ". В случае, если вы хотите использовать его как буквальную точку, вам придется "экранировать" его с помощью обратной косой черты \ до этого. (Да, сопоставление любого символа было бы безвредным в нашем случае, но я сделал это для полноты картины.)

Вы можете выполнить поиск определенного шаблона с помощью файлового менеджера Nautilus и регулярных выражений.

Чтобы сделать это, нажмите на Выберите Элементы, Соответствующие в меню передач, как показано ниже (вы также можете нажать Ctrl+s).

enter image description here

Затем просто введите обычное выражение ABC* и подтвердите.

enter image description here

Каждый файл, имя которого соответствует вашему шаблону, будет выбран автоматически.

enter image description here

Я использую Nautilus 3.6.* из GNOME3 PPA на Ubuntu 12.10 (Quantal).

вы можете использовать GREP, я думаю, что это самое простое решение, возможно, также добавьте некоторые другие параметры grep, чтобы сделать совпадение более точным

tree | grep ABC

Если вы не знаете каталог, то ABC* файлы находятся в, и у вас есть миллионы файлов, locate команда - это самый быстрый метод.

$ locate /ABC/mnt/clone/home/rick/.cache/mozilla/firefox/9fu0cuql.default/cache2/entries/ABC6AD2FEC16465049B48D39FD2FE538258F2A34/mnt/clone/home/rick/.cache/mozilla/firefox/9fu0cuql.default/cache2/entries/ABCBFDA54262F47253F95ED6ED4131A465EE0E39/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCABC.sh/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBCDA.sh/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBDDA.sh/mnt/old/home/rick/.cache/mozilla/firefox/3vkvi6ov.default/cache2/entries/ABC0C99FCEABAD0C6AA2078CD025A1CDE48D7BA1/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCABC.sh/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBCDA.sh/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBDDA.sh

Записи:

  • Приведенная выше команда выполняется за 1 секунду для 1 миллиона файлов.
  • В сравнении с find команда, начинающаяся с / корневой каталог будет очень долгое время и генерирует множество ошибок разрешения.
  • Если файлы были созданы сегодня, вы должны запустить sudo updatedb первый.

Самое простое решение для меня

ls | grep PATTERN

Здесь вы можете задать любое регулярное выражение в ШАБЛОНЕ.

Например, чтобы найти файлы с буквой "ab" в любом месте их имени, введите

ls | grep ".*ab.*"

Чтобы найти файлы, начинающиеся с "ab", введите

ls | grep "^ab"

Команда-t в одном из моих любимых плагинов vim это плагин на основе ruby над интеграцией с ФЗФ.

Используя Comamnd-T и FZF, вы можете выполнять поиск с помощью чрезвычайно быстрого "нечеткого" механизма для:

  • Открытие файлов и буферов
  • Переход к тегам и справке
  • Выполняемые команды или предыдущие поисковые запросы и команды
  • с минимальным количеством нажатий клавиш.

Как вы можете видеть

enter image description here

Я всегда выполняю поиск в истории команд, открывая новый терминал и нажимая:

CTRL+R

В дополнение к рекурсивному поиску во всех папках путем записи на любой вкладке терминала:

fzf

Затем введите свое имя файла

ABC

Кроме того, вы можете написать внутри vim

:CommandT 

Действительно полезно, особенно в больших папках.

Предположим, что я нахожусь в корневом каталоге, и мне нужен только список каталога etc: мы пишем,

find -type d -name "etc"

в результате мы получаем,

[root@unix /]# find -type d -name "etc"./etc./usr/lib/firefox/bundled/etc./usr/lib/unix-yarn/etc./usr/lib/unix/etc./usr/lib/festival/etc./usr/bin/lib/vmware-tools/lib64/libconf/etc./usr/bin/lib/vmware-tools/lib32/libconf/etc./usr/etc./usr/share/doc/oddjob-0.30/sample/etc./usr/share/festival/lib/etc./usr/local/etc./usr/java/jdk1.7.0_25/lib/visualvm/etc./home/user1/Desktop/VMware Tools/vmware-tools-distrib/lib/lib64/libconf/etc./home/user1/Desktop/VMware Tools/vmware-tools-distrib/lib/lib32/libconf/etc./home/user1/Desktop/VMware Tools/vmware-tools-distrib/etc./home/user1/Desktop/VMware Tools/vmware-tools-distrib/caf/etc

Другой Пример,

Также мы можем написать:

ls | grep "etc"

мы получаем,

etc

Питон:

$ python -c 'import sys,os;found=[os.path.join(r,i) for r,s,f in os.walk(".") for i in f if i.startswith("ABC")];map(lambda x: sys.stdout.write(x+"\n") ,found)'

Perl:

$ perl -le 'use File::Find;find(sub{ -f && $_ =~/^ABC/ && print $File::Find::name  },".")'