подсчет определенного файла в каталоге

подсчет определенного файла в каталоге

Предположим, мне нужно посчитать все файлы в каталоге, которые заканчиваются на 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

Связанный контент