Eu não aconselharia analisar a saída de ls
, find
, etc (veja ParsingLs - Greg's Wiki para uma explicação de porque é uma má ideia).
Em vez disso, a Expansão de Parâmetros em uma matriz bash pode produzir uma lista sem as extensões de arquivo.
filelist=(*); # or filelist=(*.log.*) to be more precise
printf '%q\n' "${filelist[@]%.*}" # or echo "${filelist[@]%.*}"
Então, para trabalhar nos arquivos individualmente ...
for i in "${filelist[@]%.*}"; do
echo "$i";
done
Para a finalidade específica do OP, podemos usar uma matriz associativa para manter a contagem de versões.
filelist=(*.log.*)
declare -A count
for i in "${filelist[@]%.*}"; do
(( count["$i"]++ ));
done
for j in "${!count[@]}"; do
printf '%q\t%q\n' "$j" "${count[$j]}";
done | sort
report01.log 6
report02.log 6
report03.log 6
report04.log 6
report05.log 6