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