Kaip perskaityti visas katalogo eilutes, kurios yra kataloge?

Mes turime PHP programą ir norime suskaičiuoti visas kodo eilutes pagal tam tikrą katalogą ir jo pakatalogius. Mums nereikia ignoruoti komentarų, nes tik bandome gauti apytikrę idėją.

 wc -l *.php 

Ši komanda veikia gerai nurodytame kataloge, tačiau ignoruoja pakatalogius. Maniau, kad tai gali veikti, tačiau ji grįžta 74, o tai tikrai nėra ...

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

Kokia yra tinkama sintaksė visoms rinkmenoms paduoti?

1376
31 авг. rinkinys user77413 rugpjūčio 31 d 2009-08-31 20:42 '09 ne 20:42 2009-08-31 20:42
@ 42 atsakymai
  • 1
  • 2

Bandymas:

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

SLOCCount įrankis taip pat gali padėti.

Tai suteiks tikslią kodo eilutę bet kuriai hierarchijai, kuriai jūs nurodote, ir kai kuriuos papildomus parametrus.

2320
31 авг. Petro Elespuru atsakymas 2009-08-31 20:50 '09 ne 20:50 2009-08-31 20:50

Kita eilutė:

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

veikia su vardais su tarpais, rodo tik vieną numerį.

419
31 авг. atsakymą pateikė Shizzmo 31 rug . 2009-08-31 23:26 '09, 23:26 pm 2009-08-31 23:26

Jei vis dar naudojate naujausią „Bash“ (arba „ZSH“) versiją, tai daug paprasčiau:

 wc -l ***.php 

Jei naudojate „bash“, reikia tiesiog atnaujinti. Nėra jokios priežasties naudoti bash.

4
26 окт. Atsakymas pateikiamas „ HappyFace“ spalio 26 d. 2018-10-26 18:23 '18, 18:23 PM 2018-10-26 18:23

Jei norite, kad rezultatai būtų surūšiuoti pagal eilučių skaičių, galite tiesiog pridėti | sort arba | sort -r | sort -r ( -r mažėjančia tvarka) į pirmąjį atsakymą, pavyzdžiui:

 find . -name '*.php' | xargs wc -l | sort -r 
4
14 дек. Paul Pettengill atsakymas gruodžio 14 d 2012-12-14 22:14 '12 10:14 val. 2012-12-14 22:14

Kažkas kitas:

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

Tai puikiai veikia, tačiau dabartiniame aplanke arba viename iš jo poaplankių turite turėti bent vieną *.php failą, kitaip wc kioskai

4
02 февр. atsakymas suteiktas Nav 02 Feb. 2013-02-02 17:56 '13, 17:56, 2013-02-02 17:56

Jei jums reikia tik viso eilių skaičiaus, leiskite savo PHP failams kalbėti, galite naudoti labai paprastą vienos eilutės komandą net ir Windows sistemoje, jei turite įdiegtą „GnuWin32“. Čia jis yra:

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

Turite tiksliai nurodyti, kur yra „find.exe“, kitaip „Windows“, kurioje bus vykdoma FIND.EXE (iš senų DOS panašių komandų), nes tai tikriausiai yra iki GnuWin32 PATH aplinkoje ir turi skirtingus parametrus ir rezultatus.

Atkreipkite dėmesį, kad aukščiau esančioje komandoje turėtumėte naudoti atgalines citatas, o ne vieną kabučių.

3
10 февр. Atsakymą pateikė Neven Boyanov , vasario 10 d. 2011-02-10 13:14 '11, 13:14 pm 2011-02-10 13:14

Windows“ sistemoje greitas ir paprastas įrankis yra „ LocMetrics“ .

3
14 янв. atsakymas pateikiamas walv 14 sausis 2015-01-14 23:58 '15, 23:58 pm 2015-01-14 23:58

Išduodant ilgiausias rinkmenas (t. Y. Galbūt šioms ilgoms rinkmenoms reikia šiek tiek rekonstravimo meilės?) Ir išskyrus kai kuriuos tiekėjų katalogus:

  find . -name '*.php' | xargs wc -l | sort -nr | egrep -v "libs|tmp|tests|vendor" | less 
3
08 июля '13 в 6:21 2013-07-08 06:21 atsakymą pateikė Matt , liepos 8 d. 13 d., 6:21 2013-07-08 06:21

nors man patinka skriptai, kuriuos aš norėčiau, nes jis taip pat rodo kiekvienos rinkmenos santrauką, jei bendra

 wc -l `find . -name "*.php"` 
2
08 окт. atsakymas pateikiamas akiva 08 okt. 2014-10-08 08:01 '14 at 8:01 am 2014-10-08 08:01

Išimtis iš eilės

 find . -name "*.php" | xargs grep -v -c '^$' | awk 'BEGIN {FS=":"} { $cnt = $cnt + $2} END {print $cnt}' 

Įskaitant tuščias eilutes:

 find . -name "*.php" | xargs wc -l 
2
02 апр. Atsakymą pateikė Vladimiras Venediktov 02 Bal. 2015-04-02 00:43 '15 prie 0:43 2015-04-02 00:43

Jei norite išlaikyti jį paprastą, iškirpkite brokerį ir tiesiog skambinkite wc su visais failų pavadinimais:

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

Arba modernioje sintaksėje:

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

Veikia tol, kol katalogų pavadinimuose ar failų pavadinimuose nėra tarpų. Ir tol, kol neturite dešimčių tūkstančių failų (šiuolaikinės korpusai palaiko labai ilgas komandų eilutes). Jūsų projekte yra 74 failai, todėl turite daug vietos augti.

2
08 июня '16 в 23:56 2016-06-08 23:56 atsakymą pateikė alexis birželio 8 d. 16 d. 23:56 2016-06-08 23:56

Jums nereikia visų šių sudėtingų ir sudėtingų prisiminti komandų. Jums reikia tik įrankio, vadinamo linijiniu skaitikliu .

Greita peržiūra

Štai kaip jūs gaunate įrankį.

 $ pip install line-counter 

Naudokite line komandą, kad gautumėte failų skaičių ir eilutės skaičių dabartiniame kataloge (rekursyviai)

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

Jei norite daugiau informacijos, tiesiog naudokite line -d .

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

Ir geriausia šios priemonės dalis, ją galite pridėti prie .gitignore kaip konfigūracijos failo. Galite nustatyti taisykles, kad pasirinktumėte arba ignoruotumėte, kuriuos failus reikia skaityti taip pat, kaip ir „.gitignore“.

Daugiau aprašymo ir naudojimo čia: https://github.com/MorganZhang100/line-counter

2
11 авг. atsakymą pateikė Morgan Zhang 11 rug. 2016-08-11 02:39 '16 at 2:39 2016-08-11 02:39

Naudojau šį inline scenarijų, kurį naudoju iš src-projekto katalogo:

  for i in $(find . -type f); do rowline=$(wc -l $i | cut -f1 -d" "); file=$(wc -l $i | cut -f2 -d" "); lines=$((lines + rowline)); echo "Lines["$lines"] " $file "has "$rowline"rows."; done  unset lines 

Tai daro šią išvadą:

 Lines[75] ./Db.h has 75rows. Lines[143] ./Db.cpp has 68rows. Lines[170] ./main.cpp has 27rows. Lines[294] ./Sqlite.cpp has 124rows. Lines[349] ./Sqlite.h has 55rows. Lines[445] ./Table.cpp has 96rows. Lines[480] ./DbError.cpp has 35rows. Lines[521] ./DbError.h has 41rows. Lines[627] ./QueryResult.cpp has 106rows. Lines[717] ./QueryResult.h has 90rows. Lines[828] ./Table.h has 111rows. 
2
24 сент. atsakymą pateikė Luca Davanzo 24 sep . 2014-09-24 18:01 '14 at 18:01 2014-09-24 18:01

OS X sistemoje bent jau „+ + + + +“ komandų, išvardytų kai kuriuose kituose atsakymuose, tipai „total“ kelis kartus įrašomi į didelius sąrašus ir nėra išsamios informacijos. Galėjau gauti vieną bendrą .c failų skaičių naudodamas šią komandą:

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

2
09 сент. Doug Richardson atsakymas, rugsėjo 09 d 2014-09-09 21:29 '14, 21:29 2014-09-09 21:29
  • 1
  • 2

Kiti klausimai apie „ žymes arba „ Užduoti klausimą“