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

Предположим, мне нужно сосчитать каждый файл в каталоге, который заканчивается на o. (например, ab12.14o, 70010340.09o). Какую команду мне нужно использовать?

Я старался ls *.o | wc но это не работает

2 ответа

Решение

Вам, вероятно, просто нужно удалить .из вашего выражения glob - что заставляет его совпадать только с файлами, заканчивающимися на .o скорее, чем o

Тем не менее, лучшим способом было бы использовать find:

find . -maxdepth 1 -name '*o' -printf 'x' | wc -c

Можете добавить -type f ограничить его простыми файлами (исключая каталоги) и удалить -maxdepth 1 если вы хотите считать рекурсивно.

Не использовать ls,

Используйте массив оболочки для хранения имен файлов, оканчивающихся на o:

files=( *o )

Теперь сделайте:

echo "${#files[@]}"

чтобы получить количество файлов.

@steeldriver сделал справедливое замечание: если у вас нет подходящих имен файлов, шаблон glob будет воспринят буквально. Из-за этого, даже если нет подходящих имен файлов, вы все равно получите количество файлов равным 1.

Чтобы преодолеть этот набор nullglob или же failglob опция оболочки:

shopt -s nullglob
shopt -s failglob
Другие вопросы по тегам