Dizinin bütün qovluqlarını recursively oxumaq necə?

PHP proqramımız var və kodun bütün satırlarını müəyyən bir kataloq və onun alt dizinleri altında saymaq istəyirik. Biz şərhləri görməməzliyə ehtiyacımız yoxdur, çünki biz yalnız kobud bir fikir əldə etməyə çalışırıq.

 wc -l *.php 

Bu əmri göstərilən kataloq içərisində yaxşı işləyir, lakin alt dizinləri məhəl qoymur. Mən bunun işləyə biləcəyini düşünürdüm, amma 74-i qaytarır, bu da mütləq deyil ...

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

Bütün fayllar üçün düzgün sintaksis nədir?

1376
31 авг. 31 avqustda user77413 müəyyən 2009-08-31 20:42 '09 da 20:42 'da 2009-08-31 20:42
@ 42 cavab
  • 1
  • 2

Təcrübə:

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

SLOCCount aracı da kömək edə bilər .

Bu, onu göstərdiyiniz hər hansı bir iyerarxiya üçün kodun dəqiq mənbə xətləri və bir sıra əlavə parametrlər verəcəkdir.

2320
31 авг. Peter Elespuru tərəfindən verilmiş cavab 31 Avqust. 2009-08-31 20:50 '09 da 20:50 'da 2009-08-31 20:50

Digər bir xətt üçün:

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

boşluqları olan adlarla işləyir, yalnız bir ədəd göstərir.

419
31 авг. Cavab Shizzmo 31 avqustda verilir . 2009-08-31 23:26 '09 at 11:26 pm 2009-08-31 23:26

Əgər hələ də Bash (və ya ZSH) ən son versiyasını istifadə etsəniz, daha asandır:

 wc -l ***.php 

Bash istifadə etsəniz, sadəcə yüksəltməlisiniz. Bash istifadə etmək üçün heç bir səbəb yoxdur.

4
26 окт. Cavab 26 oktyabrda HappyFace verilir . 2018-10-26 18:23 '18 'də saat 18:23' də 2018-10-26 18:23

Sonuçların satır sayısına görə sıralanmasını istəyirsinizsə, sadəcə | sort əlavə edə bilərsiniz | sort və ya | sort -r ilk növbədə | sort -r (azalan sıraya görə -r ), məsələn:

 find . -name '*.php' | xargs wc -l | sort -r 
4
14 дек. Pol Pettengill tərəfindən verilmiş cavab 14 dekabr 2012-12-14 22:14 '12 saat 10:14 'da 2012-12-14 22:14

Başqa bir şey:

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

Bu yaxşı işləyir, ancaq mövcud qovluqda və ya alt klasörlerdəki birində ən azı bir *.php faylına ehtiyacınız var, əks halda wc stalls

4
02 февр. Cavab verilir 02 fevral. 2013-02-02 17:56 '13 'da 17:56' də 2013-02-02 17:56

Yalnız xətlərin ümumi sayına ehtiyacınız varsa, PHP fayllarınızın danışmasına icazə verin, əgər GnuWin32 quraşdırılmış olsa da, Windows altında çox sadə bir-line komanda istifadə edə bilərsiniz. Burada:

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

Find.exe'nin harada yerləşdiyini dəqiqləşdirməlisiniz, əksinə, bu, PATH mühitində GnuWin32-ə qədərdir və fərqli parametr və nəticələrə malik olduğu üçün FIND.EXE (köhnə DOS kimi əmrlərdən) olan Windows-da yerinə yetiriləcəkdir.

Yuxarıda göstərilən əmrdə tək quotes deyil, təkrar istifadə etməlisiniz.

3
10 февр. Cavab 10 fevralda Neven Boyanov tərəfindən verilir. 2011-02-10 13:14 '11 saat 13:14 'da 2011-02-10 13:14

Windows üçün sürətli və asan bir vasitədir LocMetrics .

3
14 янв. cavab yanvarın 14-də verilir 2015-01-14 23:58 '15 at 11:58 pm 2015-01-14 23:58

Ən uzun faylların verilməsi (məsələn, bu uzun fayllar bəzi refactoring sevgi lazımdır?) Və bəzi təchizatçı kataloqu istisna olmaqla:

  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 Cavab Matt tərəfindən 08.07.2013 tarixində saat 6 : 21-da verilir

İstədiyimiz skriptləri sevirəm, çünki ümumi olaraq hər bir fayl üçün xülasə göstərir

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

Boş xətt istisnası

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

Boş xətlər daxildir:

 find . -name "*.php" | xargs wc -l 
2
02 апр. Cavab Vladimir Venediktov tərəfindən verilib 02 Aprel. 2015-04-02 00:43 '15 at 0:43 2015-04-02 00:43

Bu sadə saxlamaq istəyirsinizsə, broker kəsmək və yalnız bütün fayl adları ilə wc zəng:

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

Və ya müasir sintaksisdə:

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

Dizin adlarında və ya fayl adlarında boşluq olmadığı müddətcə çalışır. Və on minlərlə faylları olmadığı müddətcə (müasir kabuklar çox uzun əmr xəttlərini dəstəkləyir). Layihənizdə 74 fayl var, buna görə böyümək üçün bir çox otaq var.

2
08 июня '16 в 23:56 2016-06-08 23:56 Cavab alexis tərəfindən 08 iyun '16' da 23:56 2016-06-08 23:56 'də verilir

Bütün bu çətin və yaddaqalan əmrlərə ehtiyacınız yoxdur. Yalnız line-counter adlı bir vasitəyə ehtiyacınız var.

Tez baxış

Vasitəni necə əldə edəcəyiniz.

 $ pip install line-counter 

Dosyaların sayını və cari dizindəki xətlərin sayını almaq üçün line əmrini istifadə edin (recursively)

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

Daha ətraflı məlumat istəyirsinizsə, line -d istifadə edin.

 $ 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 

Və bu vasitənin ən yaxşı hissəsinə əlavə edə bilərsiniz .gitignore bir konfiqurasiya faylı olaraq. '.Gitignore' saytında etdiyiniz kimi faylları oxumaq üçün seçilmək və ya görməmə qaydalarını təyin edə bilərsiniz.

Daha çox məlumat və burada istifadə edin: https://github.com/MorganZhang100/line-counter

2
11 авг. Cavab Morgan Zhang 11 avqustda verilir. 2016-08-11 02:39 '16 at 2:39 2016-08-11 02:39

Src-proyektor qovluğundan istifadə etdiyim bu inline scriptini istifadə etdim:

  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 

Bu nəticə belədir:

 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 сент. cavab 24 sentyabrda Luca Davanzo tərəfindən verilir . 2014-09-24 18:01 '14 saat 18:01 'də 2014-09-24 18:01

OS X-də, ən azı, böyük siyahılardakı bir neçə dəfə "cəmi" tipli bəzi cavablardakı + xarg + wc əmrləri və tam məlumat yoxdur. Aşağıdakı əmri istifadə edərək, bir .c faylının ümumi sayını əldə edə bildim:

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

2
09 сент. Doug Richardson tərəfindən verilmiş cavab 09.09 2014-09-09 21:29 '14 da 21:29 2014-09-09 21:29
  • 1
  • 2

tags ilə bağlı digər suallar və ya bir sual