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