Например, если мой каталог содержит файлы a, b, c, c1, c2, c3, c4, d, e, f, g
Есть ли команда, похожая на следующий псевдокод
ls -filename> "c2"
который будет перечислять только файлы c3, c4, d, e, f
РЕДАКТИРОВАТЬ: Измененный вопрос для более общего случая
В bash вы можете сделать что-то вроде:
$ ls [d-f] *
Или вы можете написать сценарий оболочки.
Ах, вы имеете в виду, что хотите искать в лексическом порядке. Использовать это:
ls | awk '$1 >= "c3" && $1 <= "f" {print;}'
Используя регулярные выражения:
ls | egrep "[d-z].*"
Обычно это случается с такими странными запросами, как ваш. Вы просите ls сделать что-то очень необычное и включает понимание лексической структуры имен каталогов.
Изучите регулярные выражения по адресу: regular-expressions.info
И введите:
man grep
Чтобы прочитать страницу руководства для grep
.
Используя команду grep, вы можете выполнить любой необходимый тип фильтрации. Аналогично команде НАЙТИ в Windows. Ниже представлен один из вариантов. Если вы хотите получить полный список, например, с помощью «ls -l», вам, возможно, придется объединить его с AWK.
> ls -1 | grep ^[def]
В соответствии со строками предыдущего ответа:
используйте расширение имени файла оболочки вместо использования egrep:
ls [d-z]*
ls | grep -A 1000000 '^ c2 $' | хвост -n +2
Grep дает вам строку, которая соответствует и следующий миллион; хвост отрубает первую линию.
Если вам нужна длинная версия, добавьте в конец "| xargs ls -l".
Ограничения: это не будет работать с фанковыми именами файлов (особенно с именами файлов с новой строкой, но могут возникнуть проблемы с пробелами, управляющими символами и т. Д.). И это не сработает, если у вас в каталоге более миллиона файлов.
Это не окончательный ответ, но это должно сработать.
ls -1 | while read f ; do [[ "$f" > "g2" ]] && echo $f ; done
Его можно было бы усовершенствовать, используя "$ (echo $ f | tr [A-Z] [a-z]", чтобы игнорировать регистр. Это работает только для строк ASCII, он не сможет упорядочить имена файлов Unicode (или iso- *)