Basta executar wc -l na saída para todos os arquivos:
#!/bin/bash -
files=(/share/capture/*.pcap)
for f in "${files[@]}"; do
tcpdump -qr "$f" 2> /dev/null
done | wc -l
Veja também:
capinfos -rTc "${files[@]}"
capinfos -rTc "${files[@]}" | cut -f2 | paste -sd + | bc
(assumindo que os nomes dos arquivos não contenham caracteres TAB ou NL).
Observe que o que você faz:
FILES=/share/capture/*.pcap
Você está atribuindo a string /share/capture/*.pcap , não a lista de arquivos para $FILES . Esse padrão glob é expandido quando $FILES é referenciado sem aspas (o operador split + glob ). Posteriormente, você também deixa $f sem aspas, então invoque novamente o operador split + glob. Portanto, se $f continha caracteres em branco ou outros curingas, ele seria expandido para outros arquivos novamente. O melhor é usar uma matriz aqui e certifique-se de citar todas as suas variáveis.