Можно ли перечислить файлы, которые соответствуют шаблону с помощью ls? - PullRequest
1 голос
/ 22 мая 2019

Я хочу перечислить файлы каталога с ls, которые соответствуют шаблону, без использования grep. Возможно ли это?

Смысл в том, чтобы получить все файлы, которые соответствуют этому шаблону '^\Extra_text_[0-9]\{10\}.csv' и посчитай сколько я получил.

Я попробовал этот код:

ls | grep '^\Extra_text_[0-9]\{10\}.csv'

InputName=' | grep ^\Extra_text_[0-9]\{10\}.csv'

fileCount=`ls $INPUT_FILE/$InputName 2>/dev/null | wc -l`

echo "$fileCount

Но это не работает! : /

1 Ответ

1 голос
/ 22 мая 2019

Не только с ls. ls вообще не знает о шаблонах. Он может использоваться только с глобализацией (подстановочные знаки * и ? или расширенное глобирование - см. extglob на странице руководства Bash), предлагаемой оболочкой, но не с регулярными выражениями.

Простой способ - использовать find для этой работы (обратите внимание, что регулярное выражение должно соответствовать всему имени файла):

find . -regex '<yourpattern>'

Для подсчета результатов направьте трубку к wc:

# safe for corner case: version of find w/o newline escaping and files with newlines:
find . -regex '<yourpattern>' -printf '.' | wc -c    

# fallback for non-GNU platform, corner cases not addressed:
find . -regex '<yourpattern>' | wc -l 

Найдите -regex на странице справки find для получения дополнительной информации.

...