Как мне перечислить файлы, которые имеют только числовые имена, например

1111 
2342 
763
71

Я пытался ls -l [0-9]*, но это, кажется, приносит все имена файлов, которые начинаться с цифры и может содержать в имени что-либо после цифры.

0
Vicky 3 Сен 2017 в 17:53

4 ответа

Лучший ответ

Сначала включите опцию Bash extglob:

shopt -s extglob

Затем используйте этот шаблон:

ls -l +([0-9])

Подробнее о расширенном сопоставлении с образцом читайте в справочном руководстве по Bash .

4
rob mayoff 3 Сен 2017 в 15:00

Используя GNU find:

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

При этом используется регулярное выражение, а не шаблон имени файла. Выражение ./[0-9]*$ соответствует ./ (текущему каталогу), за которым следуют только цифры до конца ($).

Если вам нужно остановить переход find в подкаталоги, добавьте -maxdepth 1.

Если вы хотите ls -l -подобное поведение, добавьте -ls в самом конце.

2
Kusalananda 3 Сен 2017 в 14:58

Эта команда всегда будет самой безопасной!

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

Добавление нескольких примеров тестов для аудитории, чтобы было понятно.

$ls
1       12222e      2       B.class     Test.java   file.sh     y.csv
1.txt       1a      A.class     Test.class  db_2017-08-15   file.txt
$ ls  | grep -E '^[0-9]+$'
1
2
0
nagendra547 3 Сен 2017 в 16:15

С противоположной операцией: игнорирование имен файлов с не цифрами [^0-9]:

ls -1 --ignore=*[^0-9]*

< Сильный > < EM> - игнорировать = КАРТИНА
не перечислять подразумеваемые записи, соответствующие оболочке PATTERN

1
RomanPerekhrest 3 Сен 2017 в 15:07