Мне нужно искать файлы, начиная с определенного имени. Может быть несколько файлов, начиная с определенного шаблона, и я хочу перечислить все такие файлы, присутствующие в каталоге.
58
Для завершения существующих ответов:
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
сам поддерживает символы подстановки.
ls -l B*
, он показывает содержимое всех каталогов, начиная сB
имен только соответствующих каталогов?ls
указать каталог, он открывает его, это то же самое, что и делатьls -l BirthdayPhotos
. Вы можете подавить это поведение с помощьюls -d B*
.B*
к спецификации каталога?B*
расширяется, чтобы соответствовать всем каталогам, которые начинаются с,B
вы действительно пропускаетеls
список каталогов, поэтому он открывает их все для вас.ls -d ABC*
было то, о чем автор спрашивал. Кроме того, комментарии в фрагменте кода неверны,ls abc*
перечисляет содержимое каталогов, начинающихся с abc.Вы можете использовать
find
команду для поиска файлов с шаблономПриведенная выше команда будет искать файл, который начинается с abc в текущем рабочем каталоге.
-name 'abc'
перечислит файлы, которые точно совпадают. Например: abcВы также можете использовать
опция с
find
командой для поиска имени файла по шаблонуисточник
Есть много способов сделать это, в зависимости от того, что именно вы хотите с ними делать. Как правило, если вы хотите просто перечислить их, вы можете сделать это в терминале, используя:
find | grep '^\./ABC'
... и заменить
ABC
своим текстом.Чтобы понять команду, давайте разберем ее немного:
find
перечисляет все файлы в текущем каталоге и его подкаталогах; использование одного только перечислит все там. Обратите внимание, чтоfind
выводит каждый файл или каталог, начиная с./
, указывая, что их путь относительно текущего каталога. Знать об этом важно, потому что это означает, что мы будем искать результаты, начиная с,./ABC
а не простоABC
.Символ канала
|
перенаправляет вывод одной команды другой, в этом случае выводfind
перенаправляется наgrep
. Это называется трубопроводом.grep
принимает выходной сигнал и фильтры его , используя данный шаблон,^\./ABC
.' '
чтобы оболочка не интерпретировала специальные символы внутри него.Теперь сама картина написана в определенном синтаксисе называется регулярное выражение , или регулярное выражение для краткости. Regex - чрезвычайно мощный инструмент поиска, если вы освоите его, и есть сайты, подобные этому, которые научат вас этому более подробно, но обратите внимание, что
grep
это не полноценный движок regex, и вы не можете с ним все делать.Для нашей цели:
^
в регулярном выражении соответствует началу строки; это препятствует тому, чтобы это соответствовало образцу, если это не происходит в начале имени файла..
в регулярном выражении тоже есть особое значение: оно означает «соответствовать любому отдельному символу здесь». В случае, если вы хотите использовать его как буквальную точку, вам придется «экранировать» его, используя обратную косую черту\
перед ним. (Да, совпадение с любым персонажем в нашем случае было бы безвредным, но я сделал это для полноты картины.)источник
find | grep
когдаfind
у вас есть отличные возможности для сопоставления с образцом?вы можете использовать GREP, я думаю, что это самое простое решение, возможно, также добавьте некоторые другие параметры grep, чтобы сделать соответствие более точным
источник
Вы можете искать определенный шаблон, используя файловый менеджер Nautilus и регулярные выражения.
Для этого нажмите « Выбрать элементы, соответствующие» в меню «Шестерня», как показано ниже (вы также можете нажать Ctrl+ s).
Затем просто введите регулярное выражение
ABC*
и подтвердите.Каждый файл, имя которого соответствует вашему шаблону, будет выбран автоматически.
Я использую Nautilus 3.6. * Из GNOME3 PPA на Ubuntu 12.10 (Quantal).
источник
Самое простое решение для меня
Здесь вы можете указать любое регулярное выражение в PATTERN.
Например, чтобы найти файлы с «ab» в любом месте его имени, введите
Чтобы найти файлы, начинающиеся с «ab», введите
источник
Если вы не знаете каталог, в котором
ABC*
находятся файлы, и у вас есть миллионы файлов,locate
команда - самый быстрый метод.Примечания:
find
команда, запускающаяся в/
корневом каталоге, будет очень долгой и выдает много ошибок прав доступа.sudo updatedb
первую очередь.источник
я использую
или же
Он показывает все файлы с abc, а не только с abc. Но для меня это действительно простой способ сделать это.
источник
Python:
Perl:
источник
Это сопоставление с шаблоном глобуса, которое закреплено на обоих концах. Это будет соответствовать всем вхождениям файлов, начинающимся с «ABC», таким как «ABC», «ABC.txt», «ABC123», но не «xABC». Из командной строки, используя «ls» вместо «printf», здесь есть безопасная альтернатива, однако, в зависимости от мнения, с которым вы согласны, «ls» небезопасно для использования в сценарии. В этом случае использование printf с глобальным сопоставлением с образцом считается безопасным. Если вы собираетесь использовать это в скрипте, вывод printf не будет содержать символ новой строки до конца выходного потока как такового:
Возвращает:
Если вам нужны разрывы строк после каждого экземпляра:
Возвращает:
«/ path / to / files /» остается в выводе, если вы ввели его таким образом, когда запускали команду «printf». Без этого появляется только имя файла:
Возвращает
Предполагая, что вы запускаете команду в каталоге, в котором находятся файлы.
источник
echo /path/to/files/ABC* | tr " " "\n"
не очень хорошая идея. Подумайте, есть ли файл/path/to/files/ABC EFG
, в имени файла есть пробел. Выtr
будете разбивать имя файла на две отдельные строки, что не очень хорошо. Еще хуже, если в имени файла есть несколько пробелов. Я бы рекомендовал использоватьprintf "%s\n" ABC*
вместо этого, что должно помочь с пробелами в именах файлов, но все еще проблематично с другими специальными символами, такими как\n
Command-t в одном из моих любимых плагинов vim, это плагин на основе ruby, выше интеграции с FZF.
Используя Comamnd-T и FZF, вы можете выполнять поиск с чрезвычайно быстрым «нечетким» механизмом для:
Как вы видете
Я всегда ищу в истории команд, открывая новый терминал и нажимая:
В дополнение к поиску во всех папках рекурсивно, написав в любой вкладке терминала:
Затем начните свое имя файла
Кроме того, вы можете написать внутри
vim
Действительно полезно, особенно в больших папках.
источник
Предположим, что я нахожусь в корневом каталоге и мне нужен только список каталога etc: мы пишем,
результат, который мы получаем,
Другой пример,
Также мы можем написать:
мы получили,
источник