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