Предположим, мне нужно посчитать все файлы в каталоге, которые заканчиваются на o. (например, ab12.14o, 70010340.09o). Какую команду мне нужно использовать?
Я попробовал ls *.o | wc
, но не получилось.
решение1
Вероятно, вам просто нужно удалить .
из вашего выражения glob, из-за чего оно будет соответствовать только файлам, заканчивающимся на , .o
а не наo
Однако лучшим способом было бы использовать find
:
find . -maxdepth 1 -name '*o' -printf 'x' | wc -c
Вы можете добавить -type f
, чтобы ограничить его простыми файлами (исключить каталоги) и удалить , -maxdepth 1
если вы хотите выполнять подсчет рекурсивно.
решение2
Не используйте ls
.
Используйте массив оболочки для хранения имен файлов, заканчивающихся на o
:
files=( *o )
Теперь сделайте:
echo "${#files[@]}"
чтобы получить количество файлов.
@steeldriver справедливо заметил, что если у вас нет совпадающих имен файлов, то шаблон glob будет воспринят буквально. Из-за этого, даже если нет совпадающих имен файлов, вы все равно получите количество файлов как 1.
Чтобы обойти это, установите опцию оболочки nullglob
или failglob
:
shopt -s nullglob
shopt -s failglob