Для более сложных совпадений вы можете направить вывод ls в grep, но решение wwomack является самым простым для вашего сценария.
# for file names starting with "file"
ls /usr/bin | grep ^file
# more complex file names
ls /usr/bin | grep "^[ab].*[ab]$"
# files that do not start with alphabetic characters
ls -a | grep ^[^a-zA-Z]
grep работает с содержимым файлов, а не с именами файлов.Но, используя pipe (|), вы можете обрабатывать вывод (называемый stdout) одной команды как входной файл (stdin) другой команды.
Вы захотите изучить регулярные выражения (и grep) больше по своему усмотрению, но вот некоторые основы.Во-первых, grep работает построчно, сравнивая каждую строку с регулярным выражением и печатая ее, если она совпадает.В начале регулярного выражения ^ привязывает совпадение к началу строки;в конце $ привязывает его к концу.Если шаблон регулярного выражения не начинается или не заканчивается этими символами, то любая подпоследовательность строки, которая соответствует шаблону, приводит к совпадению строки.
Например, grep ^file$
соответствует, только если строка содержит только слово file
, в то время как grep file
соответствует любой строке, которая содержит файл слова где-либо.grep file$
соответствует строкам, которые заканчиваются файлом слова с 0 или более символами перед ним.
Что касается вашего вопроса, «чьи имена не начинаются с строчных или заглавных букв английского алфавита», ваша команда может быть многоупрощенный (см. третий пример), но также обратите внимание, что вы начинаете шаблон с $
: поскольку $
соответствует концу строки, ваше регулярное выражение невозможно.Последнее замечание: в моем примере я использовал ls -a
, чтобы вернуть все файлы, включая скрытые .
.В системах Unix и Linux, если первый символ имени файла является точкой, файл обычно не отображается при перечислении каталога.