Назад | Перейти на главную страницу

В Unix можно ли перечислить записи каталога после начальной точки?

Например, если мой каталог содержит файлы 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- *)