Как искать все файлы, начинающиеся с имени & ldquo; ABC & rdquo; в каталоге?

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

58
задан 5 December 2012 в 19:21

12 ответов

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

find . -type f -name "abc*" 

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

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

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

 -iname
 -regex 

с командой find для поиска имени файла по шаблону

0
ответ дан 5 December 2012 в 19:21

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

find | grep '^\./ABC'

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

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

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

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

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

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

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

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

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

0
ответ дан 5 December 2012 в 19:21

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

tree | grep ABC
0
ответ дан 5 December 2012 в 19:21

Для завершения существующих ответов:

ls

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

ls abc*   # list all files starting with abc---
ls *abc*  # list all files containing --abc--
ls *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 сама поддерживает символы подстановки.

0
ответ дан 5 December 2012 в 19:21

Вы можете искать определенный шаблон, используя файловый менеджер 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).

0
ответ дан 5 December 2012 в 19:21

Я использую

ls | grep abc

или

ls -la | grep abc

. Он показывает все файлы с abc, а не только с abc. Но для меня это действительно простой способ сделать это.

0
ответ дан 5 December 2012 в 19:21

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

ls | grep PATTERN

Здесь вы можете дать любое регулярное выражение в шаблоне.

Например, чтобы найти файлы с «ab» в любом месте его имени, введите

ls | grep ".*ab.*"

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

ls | grep "^ab"
0
ответ дан 5 December 2012 в 19:21

Python:

$ 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  },".")' 
0
ответ дан 5 December 2012 в 19:21
printf "%s" /path/to/files/ABC*

Это сопоставление с шаблоном глобуса, которое закреплено на обоих концах. Это будет соответствовать всем вхождениям файлов, начинающимся с «ABC», таким как «ABC», «ABC.txt», «ABC123», но не «xABC». Из командной строки, используя «ls» вместо «printf», здесь есть безопасная альтернатива, однако, в зависимости от мнения, с которым вы согласны, «ls» небезопасно для использования в сценарии. В этом случае использование printf с глобальным сопоставлением с образцом считается безопасным. Если вы собираетесь использовать это в сценарии, вывод 'printf' не будет содержать символ новой строки до конца выходного потока как таковой:

printf "%s" /path/to/files/ABC*  

Возвращает:

/path/to/files/ABC /path/to/files/ABC123
[ 119] Если вам нужны разрывы строк после каждого экземпляра:

printf "%s\n" /path/to/files/ABC*

Возвращает:

/path/to/files/ABC 

/path/to/files/ABC123

«/ path / to / files /» остается в выводе, если вы ввели его таким образом когда вы запустили команду «printf». Без него отображается только имя файла:

printf "%s" ABC* 

Возвращает

ABC ABC123

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

0
ответ дан 5 December 2012 в 19:21

Команда-t в одном из моих любимых плагинов энергии, это - основанный на рубине плагин выше интеграции с FZF.

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

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

Как видете

enter image description here

Я всегда ищу в истории команд путем открытия нового терминала и совершаю нападки:

CTRL+R

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

fzf

Затем запустите свое имя файла

ABC

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

:CommandT 

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

0
ответ дан 5 December 2012 в 19:21

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

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
0
ответ дан 16 October 2019 в 14:35

Если Вы не знаете каталог эти 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 сначала.
1
ответ дан 16 October 2019 в 14:35

Другие вопросы по тегам:

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