Bir dizindeki tüm kod satırlarını özyinelemeli olarak nasıl sayabilirim?


1623

Bir PHP uygulamamız var ve belirli bir dizin ve alt dizinleri altındaki tüm kod satırlarını saymak istiyoruz. Sadece kaba bir fikir edinmeye çalıştığımız için yorumları görmezden gelmemize gerek yok.

wc -l *.php 

Bu komut belirli bir dizinde harika çalışıyor ancak alt dizinleri yok sayar. Bunun işe yarayabileceğini düşünüyordum, ama 74 geri dönüyor, ki bu kesinlikle böyle değil ...

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

Tüm dosyaları beslemek için doğru sözdizimi nedir?

Yanıtlar:


2649

Deneyin:

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

SLOCCount aracı da yardımcı olabilir.

İşaret ettiğiniz hiyerarşi için doğru kaynak kod satırlarının yanı sıra bazı ek istatistikler de verecektir.

Sıralama çıktı:

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


31
cloc.sourceforge.net sloccount'a alternatif olarak görülmeye değer olabilir (daha fazla dil ama daha az bilgi)
AsTeR

31
dahil dosyaları ile de:find . -name '*.php' -o -name '*.inc' | xargs wc -l
rymo

52
Bu, çok sayıda dosya olduğunda birden fazla sayı yazdıracaktır (çünkü wcbirden çok kez çalıştırılacaktır. Ayrıca birçok özel dosya adını da işlemez.
l0b0 23:13

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

19
Bir dizin adı boşluk içeriyorsa ... yukarıdaki komut başarısız olur !!
nitish712

474

Başka bir astar için:

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

boşluklu isimler üzerinde çalışır, yalnızca bir sayı verir.


1
+1 ditto ... sonsuza kadar aradı ... diğer tüm "find" komutları sadece gerçek dosyaların # sayısını döndürdü .... -print0 şeyler benim için gerçek satır sayısını aldı !!! Teşekkürler!
Ronedog

3
@ TorbenGundtofte-Bruun - bakınız man find.. print0 xargs -0 ile adında boşluk veya başka garip karakterler bulunan dosyalar üzerinde çalışmanıza izin verir
Shizzmo

2
@ TorbenGundtofte-Bruun - ayrıca, xargs içindeki -0 print0'e karşılık gelir, boşlukları işlemek için bir tür kodlama / kod çözme.
Tristan Reid

7
Birden fazla ad filtresine ihtiyacınız varsa, (en azından find'ın MSYSGit sürümü ile), ekstra ( find . \( -name '*.h' -o -name '*.cpp' \) -print0 | xargs -0 cat ) | wc -l
ebeveynlere

1
@DesignbyAdrian: Günlük kaydı hız değil çökme kurtarmaya yardımcı olur. Önbellekleme veya çok hızlı bir HDD nedeniyle iyi bir performans görüyor olabilirsiniz.
JMH

398

Bash'in (veya ZSH) son derece uygun bir sürümünü kullanıyorsanız, çok daha basittir:

wc -l **/*.php

Bash kabuğunda bu, globstarseçeneğin ayarlanmasını gerektirir , aksi takdirde **glob operatörü özyinelemez. Bu ayarı etkinleştirmek için sorun

shopt -s globstar

Bu kalıcı yapmak için, başlatma dosyalarından birinde (eklemek ~/.bashrc, ~/.bash_profilevs.).


7
Ben basitlik için bu upvoting, ancak ben sadece dizinleri özyinelemeli arama görünmüyor, sadece geçerli dizinin alt dizinleri denetler işaret etmek istiyorum. Bu SL6.3'te.
Godric Seer

7
Bu, kabuğunuza ve ayarladığınız seçeneklere bağlıdır. Bash'in çalışması için globstarayarlanması gerekir .
Michael Wild

2
@PeterSenna, geçerli 3.9.8 çekirdek arşivi ile komut wc -l **/*.[ch]toplam 15195373 satır bulur. Bunu "çok düşük bir değer" olarak kabul edip etmediğinizden emin değilim. Yine, globstarBash'te etkinleştirdiğinizden emin olmanız gerekir . İle kontrol edebilirsiniz shopt globstar. Açıkça etkinleştirmek için yapın shopt -s globstar.
Michael Wild

5
@MichaelWild Bu iyi bir çözüm, ancak yerleşik olmadığı ARG_MAXiçin çok sayıda .phpdosyanız varsa yine de taşacak wc.
Monica'yı eski haline getirin

1
@AlbertSamuel Hayır, her iki yöntemle üretilen dosyaların listesini karşılaştırmanız gerekir. Benim yöntemim @BroSlow tarafından belirtildiği gibi çok sayıda dosya için çalışma sorunu var. Tarafından üretilen yollar findboşluk içeriyorsa , kabul edilen cevap başarısız olacaktır . Yani kullanılarak tespit edilebilir print0ve --nullbirlikte findve xargssırasıyla aramalar.
Michael Wild

363

Kullanabilirsiniz clocBu amaç için oluşturulmuş yardımcı programı . Her dilde satır sayısını, bunların kaç tanesi yorum vb. İle birlikte rapor eder. CLOC, Linux, Mac ve Windows'ta kullanılabilir.

Kullanım ve çıktı örneği:

$ 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
Güzel çalışan ve sonunda kullanışlı istatistikler veren güzel bir araç. Sevdim.
Rob Forrest

4
Cygwin (veya diğer benzer bağlantı noktaları / ortamlar) kullanarak Windows'ta Unix komutlarını çalıştırabileceğinizi unutmayın. Bana göre, bu tür bir erişime son derece yararlı olmak, bir zorunluluktur. Bir unix komut satırı büyülüdür. Özellikle perl ve düzenli ifadeleri seviyorum.
Curtis Yallop

CLOC ve SLOCCount, 2015 ortalarında macbook'ta iyi çalışıyor. 127k Java Android projesi için sayılarının yakın olduğunu ancak tam olarak aynı olmadığını unutmayın. Ayrıca iOS eşdeğerinin LoC'nin 2 katı olduğunu unutmayın; bu nedenle, SLOCCount'taki "maliyet" metriği kapalı olabilir (veya iOS geliştiricisi, Android geliştiricisinin 2
katını

2
clocSadece bir Perl betiği olduğundan platformlar arası olduğunu açıkça belirtmek için bu sorunun başlangıcını düzenlemeyi düşünür müsünüz?
Kyle Strand

Sadece mükemmel, tabii ki Windows bash iyi çalışıyor.
yurisnm

100

UNIX benzeri sistemlerde, clockod istatistikleri sağlayan bir araç vardır .

Kod tabanımızda rastgele bir dizinde koştum diyor:

      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 teknik olarak simtao, linux veya unix'ten bahsetmeden, özellikle Windows kullanıcıları için bir çözüm olarak bahsetti.
Tim Seguine

5
@moose Table cevabımda cevabımdan çok daha sonra düzenlendi, şimdi ikisi de benzer görünüyor.
Calmarius

Bunu sevdim. cloc gerçekten temiz. Peki bu isim ne anlama geliyor?
Manoel Vilela

Artık Windows'da! Çikolatanız olduğunu varsayarsak :choco install cloc
icc97

35

Kaç dosya olduğunu veya istenen çıktıyı belirtmediniz. Aradığınız bu mu:

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

2
Bu, çok fazla dosya olmadığı sürece işe yarayacaktır: çok fazla dosya varsa, sonuç olarak birkaç satır alırsınız (xargs, dosya listesini birkaç alt listeye böler)
Pascal MARTIN

Ah evet. Bu yüzden orada kaç dosya olduğunu belirtmediğini söyledim. Sürümümü hatırlamak daha kolay, ancak birkaç dosyadan daha fazlasına sahipseniz Shin'in sürümü daha iyi. Oy veriyorum.
Paweł Polewicz

: Bekarım tırnak çok kısıtlı bir fonksiyonu, kullanılmak üzere bu uyum için gerekli 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/* . } Sonuçlar yakın için slocount vardı *.py, ama bilmiyordum *.js, *.html.
jalanb

31

Yine başka bir varyasyon :)

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

Düzenle: dosyaya göre toplamı verir.

Edit2: Ekleme .sonra findbu işi yapmak için


her iki cevap da satırları toplar.
josh123a123

En azından cygwin'de aşağıdakilerle daha iyi sonuçlar elde ettim:$ find -name \*\.php -print0 | xargs -0 cat | wc -l
Martin Haeberli

Darwin, bu sadece büyük bir toplam verir: find . -name '*.php' | xargs cat | wc -l... oysa bu dosya-dosya ve büyük bir toplam verir:find . -name '*.php' | xargs wc -l
OsamaBinLogin

30

Şaşırtıcı bir şekilde find's -execve awk. İşte başlıyoruz:

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

Bu snippet tüm dosyaları ( -type f) bulur . Dosya uzantısına göre bulmak için şunu kullanın -name:

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

2
İşlevsel olarak, bu mükemmel çalışıyor, ancak büyük listelemede (linux kaynağı) gerçekten yavaş çünkü tüm dosyalar için 1 wc işlemi yerine her dosya için bir wc işlemi başlatıyor. Bu yöntemi kullanarak 31 saniyede 1.5 saniyeye kıyasla zamanladım find . -name '*.c' -print0 |xargs -0 wc -l. Bununla birlikte, bu daha hızlı yöntem (en azından OS X'te), "toplam" ı birkaç kez yazdırır, böylece uygun bir toplam elde etmek için bazı ek filtreleme gerekir (cevabımda ayrıntıları yayınladım).
Doug Richardson

Bu, sınırsız sayıda dosya için çalışma avantajına sahiptir. Aferin!
ekscrypto

1
Bu, büyük miktarda GB ve dosyalarla çalıştıktan sonra çok daha iyi bir çözümdür. birini yaparak wcbir bir formda catsistem ilk olarak (jsons 200GB, 12k dosya ile test edilmiştir) hatları saymaya başlamak için tüm GB işlem gerekir, çünkü yavaş. wcönce yapmak sonra sonucu saymak çok daha hızlı
ulkas

1
@ DougRichardson, bunun yerine bunu düşünebilirsiniz: find . -type f -exec wc -l {} \+veya find . -name '*.py' -type f -exec wc -l {} \+ çıktı sonunda toplam yazdırılan. Eğer tüm ilgilendiğiniz toplam ise, o zaman biraz daha ileri gidebilir ve kullanabilirsiniz tail: find . -type f -exec wc -l {} \+ | tail -1veyafind . -name '*.py' -type f -exec wc -l {} \+ | tail -1
JamieJag

25

Benim için daha yaygın ve basit, farklı ad uzantılarına sahip dosyaları saymanız gerektiğini varsayalım (aynı zamanda yerliler de)

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

Geri bildiriminiz için teşekkür ederim, düzelttim.


6
bu düşündüğünüzü pek yapmaz. bulmak. -name ' . [am]' ile aynıdır. -name ' . [a | m]' her ikisi de .m veya .a ile biten tüm dosyaları bulur
Omry Yadan

1
ancak ikinci de biten dosyaları bulur. , varsa. Böylece [h | c | cpp | php | cc], [hcp |] ile aynı olur.
OsamaBinLogin

backticks kullanımdan kaldırıldı, tercih$()
Sandburg

Bu Cygwin altında çalışır. Tabii ki, "C: \" sürücüsünün cygwin kuralına uyması gerekir, örneğin: wc $ (find / cygdrive / c // SomeWindowsFolderj / -type f | egrep "\. (H | c | cpp | php | cc) ")
Christian Gingras

21

POSIX

Buradaki diğer yanıtların çoğundan farklı olarak, bunlar herhangi bir POSIX sisteminde, herhangi bir sayıda dosyada ve herhangi bir dosya adıyla (not edilenler hariç) çalışır.


Her dosyadaki satırlar:

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 {} +

Her dosyadaki dosya yoluna göre sıralanmış satırlar

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

Her dosyadaki satırlar, satır sayısına göre sıralanmış, azalan

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

Tüm dosyalardaki toplam satırlar

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

19

Dizindeki kod satırlarını saymak için sloccount adında küçük bir araç var . Boş satırları / yorumları göz ardı ettiği, programlama dili başına sonuçları grupladığı ve bazı istatistikleri hesapladığı için, istediğinizden daha fazlasını yaptığı unutulmamalıdır.


Windows için LocMetrics işi yapar
Camille

15

İstediğiniz basit bir fordöngüdür:

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

3
Bu aşırıya kaçma, önerilen cevaplara kıyasla değil xargsmi?
Nathan Fellman

5
Hayır, Nathan. Xargs cevapları mutlaka sayıyı tek bir sayı olarak yazdırmaz. Sadece bir grup alt toplam yazdırabilir.
Rob Kennedy

3
dosya adları boşluk içeriyorsa bu program ne yapacak? Yeni satırlar ne olacak? ;-)
Paweł Polewicz

38
Dosya adlarınız yeni satırlar içeriyorsa, daha büyük sorunlarınız olduğunu söyleyebilirim.
Kzqai

2
@ennuikiller Bununla ilgili sorun sayısı, her şeyden önce beyaz boşluklu dosyalar üzerinde kırılacak. Döngüden IFS=$'\n'önceki ayar , en azından adlarında yeni satırları olan dosyalar dışındaki herkes için düzeltir. İkincisi, alıntı yapmıyorsunuz '*.php', bu yüzden kabuk tarafından genişletilecek findve eklenmeyecek ve ergo aslında alt dizinlerdeki php dosyalarından hiçbirini bulamayacak. Ayrıca -printgereksizdir, çünkü diğer eylemlerin yokluğunda ima edilir.
Monica'yı eski haline getirin

12

yalnızca kaynaklar için:

wc `find`

filtrelemek için sadece grep kullanın

wc `find | grep .php$`

11

Hızlı olacak basit olan, tüm arama / filtreleme gücünü kullanacak find, çok fazla dosya (sayı bağımsız değişkenleri taşması) olduğunda başarısız olmayacak, adlarında komik sembollere sahip dosyalarla iyi çalışacak, kullanmadan xargsbir dış komutları boş yere çok sayıda (sayesinde +için findVar -exec). Hadi bakalım:

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

2
Bunun bir varyantını kendim yayınlamak üzereydim ( \;bunun +farkında olmadığım yerine ), bu cevap doğru cevap olmalı.
Mark K Cowan

7

Sorunun şu şekilde etiketlendiğini biliyorum , ancak çözmeye çalıştığınız sorunun PHP ile ilgili olduğu anlaşılıyor.

Sebastian Bergmann, PHPLOC adlı bir araç yazdı ve istediğini yaptı ve bunun üzerine sana bir projenin karmaşıklığına genel bir bakış sağladı . Bu raporuna bir örnektir:

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

Gördüğünüz gibi, sağlanan bilgiler bir geliştiricinin bakış açısından çok daha yararlıdır, çünkü bir projeyle çalışmaya başlamadan önce kabaca ne kadar karmaşık olduğunu söyleyebilir.


7

Kimsenin bunu arkada gömülü görmeyeceğini tahmin etmek ... Şimdiye kadar cevapların hiçbiri boşluklu dosya isimleri sorununa girmiyor. Ayrıca, xargsağaçtaki toplam yol uzunluğu kabuk ortamı boyut sınırını aşarsa (Linux'ta varsayılan olarak birkaç megabayta karşılık gelir) , kullanılanların tümü başarısız olur. İşte bu sorunları oldukça doğrudan çözen bir problem. Alt kabuk, boşluklu dosyalarla ilgilenir. Tek awktek dosya wcçıktılarının akışını toplar, bu yüzden asla boş alan kalmamalıdır. Ayrıca execyalnızca dosyalarla da kısıtlanır (dizinleri atlamak):

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

6

WC -L? daha iyi kullanmak GREP -C ^

wc -l? Yanlış! wc komutu satırları değil , yeni satır kodlarını sayar ! Dosyadaki son satır yeni satır koduyla bitmediğinde, bu sayılmaz!

hala sayı çizgileri istiyorsanız grep -c ^ kullanın , tam örnek:

#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

Son olarak, wc -l tuzağına dikkat edin (sayım girer, satır değil !!!)


Lütfen bir satırın POSIX tanımını okuyun . İle grep -c ^sen sayısını belirleriz eksik hatları ve böyle eksik çizgileri bir görünemez metin dosyası .
gniourf_gniourf

2
Bunu biliyorum. Uygulamada EOL olmadığı için sadece son satır eksik olabilir. Fikir, eksik olanlar dahil tüm satırları sayıyor. Çok sık bir hatadır, sadece tam hatları sayar. saydıktan sonra "neden son satırı kaçırdım ???" diye düşünüyoruz. Bu neden cevap ve düzgün bir şekilde nasıl yapılacağını tarif.
Znik

Veya, bir astar istiyorsanız: find -type f -name '*.php' -print0 | xargs -0 grep -ch ^ | paste -sd+ - | bc Alternatifler için buraya bakın bc: stackoverflow.com/q/926069/2400328
techniao

5

Zsh globs ile çok kolay:

wc -l ./**/*.php

Eğer bash kullanıyorsanız, yükseltmeniz yeterlidir. Bash kullanmak için kesinlikle hiçbir sebep yoktur.


4

çok basit

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

1
dosya adlarından birinde bir boşluk veya yeni bir satır varsa başarısız olur
Paweł Polewicz

4

Sonuçlarınızın satır sayısına göre sıralanmasını istiyorsanız , ilk yanıta yalnızca | sortveya | sort -r( -razalan düzen için) ekleyebilirsiniz , örneğin:

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

1
Çıktısı xargs wc -lsayısal olduğundan, gerçekte sort -nveya kullanmanız gerekir sort -nr.
Dustin Ingram

4

İçin , Windows , kolay ve hızlı bir araçtır LocMetrics .


Eğer bash kullanıyorlarsa OP'nin Windows'ta olması pek olası değildir.

1
@VanessaMcHale soru başlığı ve açıklaması hem sadece unix çözümü gerektirmez. Yani Windows tabanlı bir çözüm kabul edilebilir. Ayrıca Google, benzer bir çözüm ararken beni bu sayfaya yönlendirdi.
walv

Bu yorum bana yardımcı oldu. Bunu denedim ve iyi çalışıyor.
Allan F

4

Farklı birşey:

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

Bu iyi çalışıyor, ancak *.phpgeçerli klasörde veya alt klasörlerinden birinde veya başka wctezgahlarda en az bir dosya olması gerekiyor


mayıs da taşabilir ARG_MAX
Mark K Cowan

4

Linux'taysanız (ve bunu siz alıyorum), araç çokgenliğimi tavsiye ederim . Daha hızlı daha dramatik ya sloccountya clocve daha özellikli olduğunu sloccount.

İle çağırabilirsiniz

poly .

veya

poly

bu yüzden bazı kıvrımlı bash betiğinden çok daha kullanıcı dostu.


4

Tokei aracı bir dizindeki kodla ilgili istatistikleri görüntüler. Tokei dosya sayısını, bu dosyalar içindeki toplam satırları ve dile göre gruplandırılmış kodları, yorumları ve boşlukları gösterir. Tokei ayrıca Mac, Linux ve Windows'ta da mevcuttur.

Tokei'nin çıktısının bir örneği aşağıdaki gibidir:

$ 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 , depodaki README dosyasındaki yönergeleri izleyerek yüklenebilir .


1
Bu kabul edilen cevap olmalı
Elijas

3

Sadece toplam satır sayısına ihtiyacınız varsa, PHP dosyalarınızın Windows altında bile çok basit bir satır komutu kullanabileceğinizi varsayalım. Bunun gibi:

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

Tam olarak find.exe'nin nerede olduğunu belirtmeniz gerekir, aksi takdirde Windows sağlanan FIND.EXE (eski DOS benzeri komutlardan), muhtemelen PATH ortamında GnuWin32'den önce olduğundan ve farklı parametreler ve sonuçlar içerdiğinden yürütülecektir.

Yukarıdaki komutta tek tırnak değil, geri tırnak kullanmanız gerektiğini lütfen unutmayın.


Yukarıdaki örnekte cmd.exe yerine windows için bash kullanıyorum, bu yüzden eğik çizgi "/" değil, eğik çizgi "\" vardır.
Neven Boyanov

3

Önce en uzun dosyaları vermek (örneğin, bu uzun dosyaların yeniden düzenleme sevgisine ihtiyacı vardır?) Ve bazı satıcı dizinlerini hariç tutmak:

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

3

Basit tutmak istiyorsanız, aracıyı kesin ve wctüm dosya adlarını arayın :

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

Veya modern sözdiziminde:

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

Dizin adlarının veya dosya adlarının hiçbirinde boşluk olmadığı sürece çalışır. Ve on binlerce dosyanız olmadığı sürece (modern kabuklar gerçekten uzun komut satırlarını destekler). Projenizde 74 dosya var, bu yüzden büyümek için bolca yeriniz var.


Bunu beğendim! Karma C / C ++ ortamındaysanız:wc -l `find . -type f \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -print`
Bram

üst cevap değildi şaşırttı
ms4720 3:18

3

Tüm bu karmaşık ve hatırlanması zor komutlara ihtiyacınız yok. Sadece line-counter adlı bir araca ihtiyacınız var .

Hızlı bir genel bakış

Aracı bu şekilde elde edersiniz

$ pip install line-counter

lineGeçerli dizin altında dosya sayısını ve satır sayısını almak için komutu kullanın (yinelemeli olarak)

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

Daha fazla ayrıntı istiyorsanız, sadece kullanın 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

Ve bu aracın en iyi yanı, buna .gitignoreyapılandırma dosyası ekleyebilirsiniz . '.Gitignore' öğesinde yaptığınız gibi ne tür dosyaların sayılacağını seçmek veya yoksaymak için kurallar ayarlayabilirsiniz.

Daha fazla açıklama ve kullanım burada: https://github.com/MorganZhang100/line-counter


3

Dosyalar çok fazla ise, toplam satır sayısını aramak daha iyidir.

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

2

En az OS X'te, diğer cevapların bazılarında listelenen find + xarg + wc komutları büyük listelerde birkaç kez "toplam" yazdırır ve verilen toplamın tamamı yoktur. Aşağıdaki komutu kullanarak .c dosyaları için tek bir toplam elde edebildim:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.