Come contare ricorsivamente tutte le righe di codice in una directory?


1625

Abbiamo un'applicazione PHP e vogliamo contare tutte le righe di codice in una directory specifica e nelle sue sottodirectory. Non abbiamo bisogno di ignorare i commenti, poiché stiamo solo cercando di ottenere un'idea approssimativa.

wc -l *.php 

Questo comando funziona benissimo in una determinata directory, ma ignora le sottodirectory. Stavo pensando che potrebbe funzionare, ma sta tornando 74, il che non è assolutamente il caso ...

find . -name '*.php' | wc -l

Qual è la sintassi corretta per alimentare tutti i file?

Risposte:


2650

Provare:

find . -name '*.php' | xargs wc -l

Anche lo strumento SLOCCount può essere d'aiuto.

Fornirà un accurato numero di righe di codice per qualsiasi gerarchia in cui lo punti, oltre ad alcune statistiche aggiuntive.

Uscita ordinata:

find . -name '*.php' | xargs wc -l | sort -nr


31
cloc.sourceforge.net potrebbe valere la pena di essere considerato un'alternativa allo sloccount (più lingue ma meno informazioni)
AsTeR

31
con i file include anche:find . -name '*.php' -o -name '*.inc' | xargs wc -l
rymo

52
Questo stamperà più di un numero quando ci sono molti file (perché wcverrà eseguito più volte. Inoltre non gestisce molti nomi di file speciali.
l0b0

42
@idober:find . -name "*.php" -not -path "./tests*" | xargs wc -l
endre

19
Se un nome di directory contiene spazi ... il comando precedente non riesce !!
nitish712

474

Per un altro one-liner:

( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l

funziona su nomi con spazi, genera solo un numero.


1
+1 idem ... cercato per sempre ... tutti gli altri comandi "find" hanno restituito solo il numero di file effettivi .... la roba -print0 qui ha ottenuto il conteggio delle righe per me !!! Grazie!
Ronedog,

3
@ TorbenGundtofte-Bruun - vedi man find.. print0 con xargs -0 ti permette di operare su file che hanno spazi o altri strani personaggi nel loro nome
Shizzmo

2
@ TorbenGundtofte-Bruun - inoltre, -0 in xargs corrisponde a print0, è una specie di codifica / decodifica per gestire gli spazi.
Tristan Reid,

7
Se hai bisogno di più di un filtro nome, ho scoperto che (almeno con la versione di find di MSYSGit), hai bisogno di parentesi extra: ( find . \( -name '*.h' -o -name '*.cpp' \) -print0 | xargs -0 cat ) | wc -l
Zrax,

1
@DesignbyAdrian: il journaling aiuta con il recupero da crash, non con la velocità. È probabile che tu stia riscontrando buone prestazioni a causa della memorizzazione nella cache o di un HDD molto veloce.
Jmh

398

Se si utilizza una versione abbastanza recente di Bash (o ZSH), è molto più semplice:

wc -l **/*.php

Nella shell Bash è necessario globstarimpostare l' opzione, altrimenti l' **operatore glob non è ricorsivo. Per abilitare questa impostazione, emettere

shopt -s globstar

Per renderlo permanente, aggiungilo a uno dei file di inizializzazione ( ~/.bashrc, ~/.bash_profileecc.).


7
Sto votando questo per semplicità, tuttavia voglio solo sottolineare che non sembra cercare ricorsivamente le directory, controlla solo le sottodirectory della directory corrente. Questo è su SL6.3.
Godric Seer,

7
Dipende dalla tua shell e dalle opzioni che hai impostato. Bash richiede globstardi essere impostato affinché funzioni.
Michael Wild,

2
@PeterSenna, con l'attuale archivio del kernel 3.9.8, il comando wc -l **/*.[ch]trova un totale di 15195373 righe. Non sono sicuro se lo consideri un "valore molto basso". Ancora una volta, devi assicurarti di averlo globstarabilitato in Bash. Puoi verificare con shopt globstar. Per abilitarlo esplicitamente, fallo shopt -s globstar.
Michael Wild,

5
@MichaelWild Questa è una buona soluzione, ma continuerà a traboccare ARG_MAXse si dispone di un numero elevato di .phpfile, poiché wcnon è incorporato.
Ripristina Monica, per favore, il

1
@AlbertSamuel No, dovrai confrontare l'elenco dei file prodotti con entrambi i metodi. Il mio metodo ha il problema di non funzionare per un gran numero di file, come menzionato da @BroSlow. La risposta accettata fallirà se i percorsi prodotti da findcontengono spazi. Ciò potrebbe essere risolto utilizzando print0e --nullcon le chiamate finde xargs, rispettivamente.
Michael Wild,

363

È possibile utilizzare l' clocutilità creata per questo preciso scopo. Riporta ciascuna la quantità di righe in ciascuna lingua, insieme a quante di esse sono commenti, ecc. CLOC è disponibile su Linux, Mac e Windows.

Esempio di utilizzo e output:

$ cloc --exclude-lang=DTD,Lua,make,Python .
    2570 text files.
    2200 unique files.                                          
    8654 files ignored.

http://cloc.sourceforge.net v 1.53  T=8.0 s (202.4 files/s, 99198.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Javascript                    1506          77848         212000         366495
CSS                             56           9671          20147          87695
HTML                            51           1409            151           7480
XML                              6           3088           1383           6222
-------------------------------------------------------------------------------
SUM:                          1619          92016         233681         467892
-------------------------------------------------------------------------------

4
Questo è uno strumento adorabile che funziona bene e fornisce rapidamente utili statistiche alla fine. Lo adoro.
Rob Forrest,

4
Nota che puoi eseguire i comandi Unix su Windows usando cygwin (o altre porte / ambienti simili). Per me, avere questo tipo di accesso così estremamente utile, è una necessità. Una riga di comando unix è magica. Mi piacciono particolarmente le espressioni regolari e perl.
Curtis Yallop,

CLOC e SLOCCount funzionano perfettamente su macbook a metà 2015. Nota che i loro numeri sono vicini ma non esattamente gli stessi per il progetto Android Java 127k. Si noti inoltre che l'equivalente iOS aveva 2x il LoC; quindi, la metrica "costo" in SLOCCount potrebbe essere disattivata (o forse lo sviluppatore iOS può fare il doppio di quello che lo sviluppatore Android fa. :-)
maxweber

2
Considereresti di modificare l'inizio di questa domanda per chiarire che clocè multipiattaforma poiché è solo uno script Perl?
Kyle Strand,

Semplicemente perfetto, funziona bene anche con Windows bash ovviamente.
yurisnm,

100

Su sistemi simili a UNIX, esiste uno strumento chiamato clocche fornisce statistiche di codice.

Mi sono imbattuto in una directory casuale nella nostra base di codice che dice:

      59 text files.
      56 unique files.                              
       5 files ignored.

http://cloc.sourceforge.net v 1.53  T=0.5 s (108.0 files/s, 50180.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               36           3060           1431          16359
C/C++ Header                    16            689            393           3032
make                             1             17              9             54
Teamcenter def                   1             10              0             36
-------------------------------------------------------------------------------
SUM:                            54           3776           1833          19481
-------------------------------------------------------------------------------

2
@moose tecnicamente simtao lo ha menzionato specificamente come soluzione per gli utenti di Windows, senza menzionare affatto Linux o Unix.
Tim Seguine,

5
@moose Table è stato modificato nella sua risposta molto più tardi della mia risposta, ora i due sembrano davvero simili.
Calmarius,

Mi piace. cloc è davvero pulito. Ma cosa significa quel nome?
Manoel Vilela,

Ora è anche su Windows! Supponendo che tu abbia il cioccolato :choco install cloc
icc97,

35

Non hai specificato quanti file ci sono o qual è l'output desiderato. E 'questo quello che stai cercando:

find . -name '*.php' | xargs wc -l

2
Funzionerà, purché non ci siano troppi file: se ci sono molti file, otterrai di conseguenza diverse righe (xargs dividerà l'elenco dei file in diversi sotto-elenchi)
Pascal MARTIN

Ah sì. Ecco perché ho detto che non ha specificato quanti file ci sono. La mia versione è più facile da ricordare, ma la versione di Shin è migliore se hai più di un paio di file. Sto votando.
Paweł Polewicz,

Avevo bisogno di adattare questo per l'uso in una funzione, in cui apici sono troppo restrittive: go () { mkdir /tmp/go; [[ -f ./"$1" ]] && mv ./"$1" /tmp/go; (find ./ -type f -name "$*" -print0 | xargs -0 cat ) | wc -l; wc -l /tmp/go/*; mv /tmp/go/* . } I risultati sono stati vicino al slocount per *.py, ma non lo sapevo *.js, *.html.
Janalb

31

Ancora un'altra variazione :)

$ find . -name '*.php' | xargs cat | wc -l

Modifica: questo darà la somma totale, invece di file per file.

Modifica2: aggiungi .dopo findper farlo funzionare


entrambe le risposte sommano le righe.
josh123a123,

Almeno su Cygwin, ho ottenuto risultati migliori con:$ find -name \*\.php -print0 | xargs -0 cat | wc -l
Martin Haeberli,

su Darwin, questo dà solo un totale generale: find . -name '*.php' | xargs cat | wc -l... mentre questo dà file per file e un totale complessivo:find . -name '*.php' | xargs wc -l
OsamaBinLogin

30

Sorprendentemente non c'è risposta basata su find -exece awk. Eccoci qui:

find . -type f -exec wc -l {} \; | awk '{ SUM += $0} END { print SUM }'

Questo frammento trova per tutti i file ( -type f). Per trovare per estensione, utilizzare -name:

find . -name '*.py' -exec wc -l '{}' \; | awk '{ SUM += $0; } END { print SUM; }'

2
Funzionalmente, questo funziona perfettamente, ma su un elenco di grandi dimensioni (sorgente Linux) è molto lento perché sta avviando un processo wc per ogni file invece di 1 processo wc per tutti i file. L'ho cronometrato a 31 secondi usando questo metodo rispetto a 1,5 secondi usando find . -name '*.c' -print0 |xargs -0 wc -l. Detto questo, questo metodo più veloce (almeno su OS X), finisce per stampare "totale" più volte, quindi è necessario un filtro aggiuntivo per ottenere un totale adeguato (ho pubblicato i dettagli nella mia risposta).
Doug Richardson,

Questo ha il vantaggio di lavorare per un numero illimitato di file. Molto bene!
ekscrypto

1
questa è una soluzione di gran lunga migliore una volta che lavora con grandi quantità di GB e file. fare uno wcsu una forma di a catè lento perché il sistema deve prima elaborare tutti i GB per iniziare a contare le linee (testato con 200 GB di jsons, file 12k). fare wcprima poi contare il risultato è molto più veloce
ulkas

1
@DougRichardson, potresti invece considerare questo: find . -type f -exec wc -l {} \+o find . -name '*.py' -type f -exec wc -l {} \+ che stampa un totale alla fine dell'output. Se tutto ciò che ti interessa è il totale, allora potresti andare un po 'oltre e utilizzare tail: find . -type f -exec wc -l {} \+ | tail -1oppurefind . -name '*.py' -type f -exec wc -l {} \+ | tail -1
JamieJag

25

Più comune e semplice per quanto mi riguarda, supponiamo che tu abbia bisogno di contare i file con diverse estensioni (diciamo, anche nativi)

wc $(find . -type f | egrep "\.(h|c|cpp|php|cc)" )

Grazie per il feedback, l'ho corretto.


6
questo non fa esattamente quello che pensi. trova . -name ' . [am]' è identico a find. -name ' . [a | m]' entrambi troveranno tutti i file che terminano con .m o .a
Omry Yadan il

1
ma il secondo troverà anche i file che terminano con. | , se presente. Quindi [h | c | cpp | php | cc] finisce per essere lo stesso di [hcp |].
OsamaBinLogin

i backtick sono deprecati, preferiscono$()
Sandburg,

Questo funziona sotto Cygwin. Naturalmente, l'unità "C: \" deve seguire la convenzione di Cygwin, come ad esempio: wc $ (find / cygdrive / c // SomeWindowsFolderj / -type f | egrep "\. (H | c | cpp | php | cc) ")
Christian Gingras il

21

POSIX

A differenza della maggior parte delle altre risposte qui, queste funzionano su qualsiasi sistema POSIX, per qualsiasi numero di file e con qualsiasi nome di file (tranne dove indicato).


Righe in ciascun file:

find . -name '*.php' -type f -exec wc -l {} \;
# faster, but includes total at end if there are multiple files
find . -name '*.php' -type f -exec wc -l {} +

Righe in ciascun file, ordinate per percorso del file

find . -name '*.php' -type f | sort | xargs -L1 wc -l
# for files with spaces or newlines, use the non-standard sort -z
find . -name '*.php' -type f -print0 | sort -z | xargs -0 -L1 wc -l

Righe in ciascun file, ordinate per numero di righe, in ordine decrescente

find . -name '*.php' -type f -exec wc -l {} \; | sort -nr
# faster, but includes total at end if there are multiple files
find . -name '*.php' -type f -exec wc -l {} + | sort -nr

Linee totali in tutti i file

find . -name '*.php' -type f -exec cat {} + | wc -l

19

C'è un piccolo strumento chiamato sloccount per contare le righe di codice nella directory. Va notato che fa più di quanto si desidera in quanto ignora righe / commenti vuoti, raggruppa i risultati per linguaggio di programmazione e calcola alcune statistiche.


Per Windows, LocMetrics fa il suo lavoro
Camille,

15

Quello che vuoi è un semplice forciclo:

total_count=0
for file in $(find . -name *.php -print)
do
    count=$(wc -l $file)
    let total_count+=count
done
echo "$total_count"

3
non è questo eccessivo rispetto alle risposte che suggeriscono xargs?
Nathan Fellman,

5
No, Nathan. Le risposte di xargs non necessariamente stampano il conteggio come un singolo numero. Potrebbe semplicemente stampare un mucchio di subtotali.
Rob Kennedy,

3
cosa farà questo programma se i nomi dei file contengono spazi? E le newline? ;-)
Paweł Polewicz,

38
Se i nomi dei tuoi file contengono nuove righe, direi che hai problemi più grandi.
Kzqai,

2
@ennuikiller Numero di problemi con questo, prima di tutto si romperà sui file con spazi bianchi. L'impostazione IFS=$'\n'prima del ciclo lo riparerebbe almeno per tutti tranne i file con le nuove righe nei loro nomi. In secondo luogo, non stai citando '*.php', quindi verrà espanso dalla shell e non find, ed ergo non troverà effettivamente nessuno dei file php nelle sottodirectory. Inoltre -printè ridondante, poiché è implicito in assenza di altre azioni.
Ripristina Monica, per favore, il

12

solo per fonti:

wc `find`

per filtrare, basta usare grep

wc `find | grep .php$`

11

Uno semplice che sarà veloce, utilizzerà tutta la potenza di ricerca / filtro di find, non fallirà quando ci sono troppi file (overflow di argomenti numerici), funzionerà bene con file con simboli divertenti nel loro nome, senza usare xargs, non avvierà un numero inutilmente elevato di comandi esterni (grazie a +per find's -exec). Ecco qui:

find . -name '*.php' -type f -exec cat -- {} + | wc -l

2
Stavo per pubblicare una variante di questo me stesso ( \;invece di +come non ne ero consapevole), questa risposta dovrebbe essere la risposta corretta.
Mark K Cowan,

7

So che la domanda è taggata come , ma sembra che il problema che stai cercando di risolvere sia legato anche a PHP.

Sebastian Bergmann ha scritto uno strumento chiamato PHPLOC che fa quello che vuoi e che ti fornisce una panoramica della complessità di un progetto. Questo è un esempio del suo rapporto:

Size
  Lines of Code (LOC)                            29047
  Comment Lines of Code (CLOC)                   14022 (48.27%)
  Non-Comment Lines of Code (NCLOC)              15025 (51.73%)
  Logical Lines of Code (LLOC)                    3484 (11.99%)
    Classes                                       3314 (95.12%)
      Average Class Length                          29
      Average Method Length                          4
    Functions                                      153 (4.39%)
      Average Function Length                        1
    Not in classes or functions                     17 (0.49%)

Complexity
  Cyclomatic Complexity / LLOC                    0.51
  Cyclomatic Complexity / Number of Methods       3.37

Come puoi vedere, le informazioni fornite sono molto più utili dal punto di vista di uno sviluppatore, perché possono dirti approssimativamente quanto sia complesso un progetto prima di iniziare a lavorarci.


7

Supponendo che nessuno lo vedrà mai seppellito sul retro ... Eppure nessuna delle risposte finora arriva al problema dei nomi di file con spazi. Inoltre, tutto ciò che viene utilizzato xargsè soggetto a errori se la lunghezza totale dei percorsi nella struttura supera il limite delle dimensioni dell'ambiente di shell (il valore predefinito è qualche megabyte in Linux). Eccone uno che risolve questi problemi in modo piuttosto diretto. La subshell si occupa dei file con spazi. Il awktotale è il flusso dei singoli wcoutput dei file , quindi non dovrebbe mai rimanere senza spazio. Limita anche solo i execfile (saltando le directory):

find . -type f -name '*.php' -exec bash -c 'wc -l "$0"' {} \; | awk '{s+=$1} END {print s}' 

6

WC-L? meglio usare GREP -C ^

wc -l? Sbagliato! Il comando wc conta i nuovi codici di linee, non le linee! Quando l'ultima riga del file non termina con un nuovo codice di riga, questo non verrà conteggiato!

se vuoi ancora linee di conteggio, usa grep -c ^ , esempio completo:

#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
     #you see use grep instead wc ! for properly counting
     count=$(grep -c ^ < "$FILE")
     echo "$FILE has $count lines"
     let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED:  $total

infine, fai attenzione alla trappola wc -l (conta entra, non linee !!!)


Leggere la definizione POSIX di una riga . Con il grep -c ^conteggio del numero di righe incomplete , e tali righe incomplete non possono apparire in un file di testo .
gniourf_gniourf,

2
Lo so. In pratica solo l'ultima riga può essere incompleta perché non ha EOL. L'idea sta contando tutte le righe, inclusa una incompleta. È un errore molto frequente, contando solo le linee complete. dopo il conteggio stiamo pensando "perché ho perso l'ultima riga ???". Questa è la risposta al perché e la ricetta su come farlo correttamente.
Znik

Oppure, se vuoi una fodera: find -type f -name '*.php' -print0 | xargs -0 grep -ch ^ | paste -sd+ - | bc Vedi qui per alternative a bc: stackoverflow.com/q/926069/2400328
techniao

4

molto semplicemente

find /path -type f -name "*.php" | while read FILE
do
    count=$(wc -l < $FILE)
    echo "$FILE has $count lines"
done

1
fallirà se c'è uno spazio o una nuova riga in uno dei nomi dei file
Paweł Polewicz,

4

Se desideri che i risultati vengano ordinati in base al numero di righe, puoi semplicemente aggiungere | sorto | sort -r( -rper ordine decrescente) alla prima risposta, in questo modo:

find . -name '*.php' | xargs wc -l | sort -r

1
Poiché l'output di xargs wc -lè numerico, si dovrebbe effettivamente utilizzare sort -no sort -nr.
Dustin Ingram,

4

Per Windows , lo strumento facile e veloce è LocMetrics .


È abbastanza improbabile che OP sia su Windows se usano bash.

1
Il titolo e la descrizione della domanda di @VanessaMcHale entrambi non richiedono chiaramente una soluzione solo unix. Quindi la soluzione basata su Windows è accettabile. Anche Google mi ha indicato questa pagina mentre cercavo una soluzione simile.
walv,

Questo commento mi ha aiutato. Ho provato questo e funziona bene.
Allan F

4

Qualcosa di diverso:

wc -l `tree -if --noreport | grep -e'\.php$'`

Questo funziona bene, ma è necessario disporre di almeno un *.phpfile nella cartella corrente o in una delle sue sottocartelle, oppure wcbancarelle


può anche traboccare ARG_MAX
Mark K Cowan il

4

Se sei su Linux (e credo che lo sia), raccomando il mio tool poliglotta . È drammaticamente più veloce di entrambi sloccounto cloced è più caratteristico di sloccount.

Puoi invocarlo con

poly .

o

poly

quindi è molto più user-friendly di alcuni script bash contorti.


4

È molto semplice con i globs zsh:

wc -l ./**/*.php

Se stai usando bash, devi solo aggiornare. Non c'è assolutamente alcun motivo per usare bash.


4

Lo strumento Tokei visualizza le statistiche sul codice in una directory. Tokei mostrerà il numero di file, le linee totali all'interno di quei file e codice, commenti e spazi raggruppati per lingua. Tokei è disponibile anche su Mac, Linux e Windows.

Un esempio dell'output di Tokei è il seguente:

$ tokei
-------------------------------------------------------------------------------
 Language            Files        Lines         Code     Comments       Blanks
-------------------------------------------------------------------------------
 CSS                     2           12           12            0            0
 JavaScript              1          435          404            0           31
 JSON                    3          178          178            0            0
 Markdown                1            9            9            0            0
 Rust                   10          408          259           84           65
 TOML                    3           69           41           17           11
 YAML                    1           30           25            0            5
-------------------------------------------------------------------------------
 Total                  21         1141          928          101          112
-------------------------------------------------------------------------------

Tokei può essere installato seguendo le istruzioni sul file README nel repository .


1
Questa dovrebbe essere la risposta accettata
Elijas,

3

Se hai bisogno solo del numero totale di righe in diciamo che i tuoi file PHP puoi usare un comando a riga singola molto semplice anche sotto Windows se hai GnuWin32 installato. Come questo:

cat `/gnuwin32/bin/find.exe . -name *.php` | wc -l

È necessario specificare dove si trova find.exe, altrimenti verrà eseguito FIND.EXE (dai vecchi comandi simili a DOS) di Windows, poiché probabilmente è precedente a GnuWin32 nell'ambiente PATH e presenta parametri e risultati diversi.

Si noti che nel comando sopra è necessario utilizzare le virgolette, non le virgolette singole.


Nell'esempio sopra sto usando bash per Windows invece di cmd.exe, ecco perché ci sono barre "/" e non barre "\".
Neven Boyanov il

3

Distribuire prima i file più lunghi (ad es. Forse questi file lunghi richiedono un po 'di amore per il refactoring?) Ed escludere alcune directory dei fornitori:

 find . -name '*.php' | xargs wc -l | sort -nr | egrep -v "libs|tmp|tests|vendor" | less

3

Se vuoi mantenerlo semplice, ritaglia l'intermediario e chiama wccon tutti i nomi dei file:

wc -l `find . -name "*.php"`

O nella sintassi moderna:

wc -l $(find . -name "*.php")

Funziona finché non ci sono spazi in nessuno dei nomi di directory o nomi di file. E fintanto che non hai decine di migliaia di file (le shell moderne supportano righe di comando davvero lunghe). Il tuo progetto ha 74 file, quindi hai un sacco di spazio per crescere.


Mi piace questa! Se ti trovi in ​​un ambiente C / C ++ ibrido:wc -l `find . -type f \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -print`
Bram,

fu sorpreso che non fosse la risposta migliore
ms4720

3

Non hai bisogno di tutti questi comandi complicati e difficili da ricordare. Hai solo bisogno di uno strumento chiamato line-counter .

Una rapida panoramica

Ecco come si ottiene lo strumento

$ pip install line-counter

Utilizzare il linecomando per ottenere il conteggio dei file e il conteggio delle righe nella directory corrente (ricorsivamente)

$ line
Search in /Users/Morgan/Documents/Example/
file count: 4
line count: 839

Se vuoi maggiori dettagli, basta usare line -d.

$ line -d
Search in /Users/Morgan/Documents/Example/
Dir A/file C.c                                             72
Dir A/file D.py                                           268
file A.py                                                 467
file B.c                                                   32
file count: 4
line count: 839

E la parte migliore di questo strumento è, è possibile aggiungere .gitignorecome configurare il file ad esso. È possibile impostare regole per selezionare o ignorare quale tipo di file contare esattamente come quello che si fa in '.gitignore'.

Ulteriori descrizioni e utilizzo sono disponibili qui: https://github.com/MorganZhang100/line-counter


3

Se i file sono troppi, meglio cercare solo il conteggio totale delle righe.

find . -name '*.php' | xargs wc -l | grep -i ' total' | awk '{print $1}'

2

Almeno su OS X, i comandi find + xarg + wc elencati in alcune delle altre risposte vengono stampati "totali" più volte su elenchi di grandi dimensioni e non viene fornito un totale completo. Sono stato in grado di ottenere un singolo totale per i file .c utilizzando il seguente comando:

find . -name '*.c' -print0 |xargs -0 wc -l|grep -v total|awk '{ sum += $1; } END { print "SUM: " sum; }'

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.