1

В командной строке Linux, как я могу перечислить только числовые (только имена с 0 до 9) имен файлов в текущем каталоге?

Это дополнительный вопрос к Как я могу получить список идентификаторов процессов в системе в командной строке Linux? где я запускаю ls в /proc/ . Я сейчас пытаюсь исключить все, кроме каталогов идентификатора процесса.

4 ответа4

4

Несмотря на название вашего вопроса, я хочу представить вам решение с помощью find . У него есть опция регулярного выражения (-regex), поэтому [0-9]* будет сопоставлять имена файлов, состоящие исключительно из цифр.

Чтобы найти только файлы (-type f) рекурсивно ниже текущего каталога (.) Используйте

find . -type f -regex ".*/[0-9]*"

.*/ В регулярном выражении является необходимым, потому что регулярное выражение " является совпадением на всем пути, а не поиском. " (man find). Поэтому, если вы хотите найти только файлы в текущем каталоге, используйте \./ вместо этого:

find . -type f -regex "\./[0-9]*"

Тем не менее, это не очень оптимально, так как поиск выполняет рекурсивно и в этом случае, и только после этого отфильтровывает желаемые результаты.

4

Если вы хотите использовать ls , вы можете использовать:

ls *[[:digit:]]*

Оператор * splat будет соответствовать любому [[:digit:]] . Вы также можете использовать:

ls *[0-9]*

Что также соответствует файлу или каталогу с цифрой 0-9.

Если у вас есть подкаталоги, которые соответствуют шаблону glob, вы можете использовать ключ -d чтобы ls не рекурсировал в них.

2

Использование ls piped для grep -E (расширенный grep с дополнительными возможностями регулярного выражения) для поиска всех имен файлов только с числовыми символами:

ls | grep -E '^[0-9]+$'
0

Вы можете использовать ls +([0-9]) для сопоставления только файлов с числовыми именами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .