Comment puis-je compter toutes les lignes de tous les fichiers dans tous les sous-répertoires avec wc
?
cd mydir
wc -l *
..
11723 total
man wc
suggère wc -l --files0-from=-
, mais je ne sais pas comment générer la liste de tous les fichiers en tant que NUL-terminated names
find . -print | wc -l --files0-from=-
n'a pas fonctionné.
Vous voulez probablement ceci:
find . -type f -print0 | wc -l --files0-from=-
Si vous ne voulez que le nombre total de lignes, vous pouvez utiliser
find . -type f -exec cat {} + | wc -l
Vous recherchez peut-être l'option exec
de find
.
find . -type f -exec wc -l {} \; | awk '{total += $1} END {print total}'
Pour compter toutes les lignes pour une extension de fichier spécifique que vous pouvez utiliser,
find . -name '*.fileextension' | xargs wc -l
si vous le voulez sur deux ou plusieurs types de fichiers différents, vous pouvez mettre l'option -o
find . -name '*.fileextension1' -o -name '*.fileextension2' | xargs wc -l
Une autre option serait d'utiliser un grep récursif:
grep -hRc '' . | awk '{k+=$1}END{print k}'
L'awk ajoute simplement les chiffres. Les options grep
utilisées sont:
-c, --count
Suppress normal output; instead print a count of matching lines
for each input file. With the -v, --invert-match option (see
below), count non-matching lines. (-c is specified by POSIX.)
-h, --no-filename
Suppress the prefixing of file names on output. This is the
default when there is only one file (or only standard input) to
search.
-R, --dereference-recursive
Read all files under each directory, recursively. Follow all
symbolic links, unlike -r.
Le grep
, par conséquent, compte le nombre de lignes correspondant à n'importe quoi (''), donc compte essentiellement les lignes.
Je suggérerais quelque chose comme
find ./ -type f | xargs wc -l | cut -c 1-8 | awk '{total += $1} END {print total}'