නාමාවලියක ඇති සියලුම කේත රේඛා පුනරාවර්තනය ලෙස ගණනය කරන්නේ කෙසේද?


1639

අපට PHP යෙදුමක් ඇති අතර නිශ්චිත නාමාවලියක් සහ එහි උප බහලුම් යටතේ කේත පේළි සියල්ල ගණනය කිරීමට අවශ්‍යය. අප දළ අදහසක් ලබා ගැනීමට උත්සාහ කරන බැවින් අදහස් නොසලකා හැරීමට අපට අවශ්‍ය නැත.

wc -l *.php 

දී ඇති නාමාවලියක් තුළ එම විධානය විශිෂ්ට ලෙස ක්‍රියා කරයි, නමුත් උප බහලුම් නොසලකා හරියි. මම හිතුවේ මේක වැඩ කරයි කියලා, නමුත් එය නැවත 74 ක් එනවා, එය අනිවාර්යයෙන්ම එසේ නොවේ ...

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

සියලුම ලිපිගොනු වල පෝෂණය කිරීම සඳහා නිවැරදි වාක්‍ය ඛණ්ඩය කුමක්ද?

Answers:


2673

උත්සාහ කරන්න:

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

SLOCCount මෙවලම ද උදව් විය හැකිය.

එය ඔබ යොමු කරන ඕනෑම ධූරාවලියක් සඳහා කේත සංඛ්‍යා වල නිවැරදි ප්‍රභව රේඛා මෙන්ම අමතර සංඛ්‍යාලේඛන ලබා දෙනු ඇත.

වර්ග කළ ප්‍රතිදානය:

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


32
cloc.sourceforge.net බෑවුම් සඳහා විකල්පයක් ලෙස බැලීම වටී (වැඩි භාෂා නමුත් අඩු තොරතුරු)
AsTeR

31
ලිපිගොනු ද ඇතුළත් වේ:find . -name '*.php' -o -name '*.inc' | xargs wc -l
රයිමෝ

52
බොහෝ ලිපිගොනු ඇති විට මෙය එකකට වඩා වැඩි ගණනක් මුද්‍රණය කරනු ඇත (මන්ද wcඑය කිහිප වතාවක් ක්‍රියාත්මක වනු ඇත. එසේම විශේෂ ගොනු නාම බොහෝමයක් හසුරුවන්නේ නැත.
l0b0

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

19
නාමාවලි නාමයක කිසියම් ඉඩක් තිබේ නම් ... ඉහත විධානය අසමත් වේ !!
nitish712

475

තවත් එක් ලයිනර් සඳහා:

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

අවකාශයන් සහිත නම් මත ක්‍රියා කරයි, ප්‍රතිදානය කරන්නේ එක් අංකයක් පමණි.


1
+1 ඩිටෝ ... සදහටම සෙව්වා ... අනෙක් සියලුම "සොයා" විධානයන් ආපසු ලබා දුන්නේ සත්‍ය ලිපිගොනු # ක් පමණි .... මෙහි -print0 දේවල් මට නියම රේඛා ගණන ලබා දී ඇත !!! ස්තූතියි!
රොනෙඩොග්

3
@ TorbenGundtofte-Bruun - බලන්න man find.. xargs -0 සමඟ print0 මඟින් ඒවායේ නමින් අවකාශ හෝ වෙනත් අමුතු අක්ෂර ඇති ලිපිගොනු මත ක්‍රියා කිරීමට ඔබට ඉඩ සලසයි
Shizzmo

2
@ TorbenGundtofte-Bruun - එසේම, xargs හි -0 මුද්‍රණ 0 ට අනුරූප වේ, එය අවකාශයන් හැසිරවීම සඳහා කේතන / විකේතනය කිරීමකි.
ට්‍රිස්ටන් රීඩ්

7
ඔබට නාම පෙරහන එකකට වඩා අවශ්‍ය නම්, (අවම වශයෙන් MSYSGit සොයාගැනීමේ අනුවාදය සමඟ), ඔබට අමතර වර්‍ග අවශ්‍ය බව මම සොයා ( find . \( -name '*.h' -o -name '*.cpp' \) -print0 | xargs -0 cat ) | wc -l
ගතිමි

1
EsDesignbyAdrian: ජර්නල් කිරීම වේගයෙන් නොව බිඳ වැටීමේ ප්‍රකෘතියට උපකාරී වේ. හැඹිලි හෝ ඉතා වේගවත් HDD නිසා ඔබ හොඳ ක්‍රියාකාරිත්වයක් දකින්නට ඇත.
jmh

400

මෑතදී බාෂ් (හෝ ZSH) හි අනුවාදයක් භාවිතා කරන්නේ නම්, එය වඩාත් සරල ය:

wc -l **/*.php

බෑෂ් කවචයේ මේ සඳහා globstarවිකල්පය සැකසීමට අවශ්‍ය වේ , එසේ **නොමැතිනම් ග්ලෝබ්-ක්‍රියාකරු පුනරාවර්තන නොවේ. මෙම සිටුවම සක්‍රිය කිරීමට, නිකුත් කරන්න

shopt -s globstar

මෙම ස්ථිර කිරීම, (ආරම්භය ගොනු එක් වෙත එක් ~/.bashrc, ~/.bash_profileආදිය).


7
මම මෙය සරල බව සඳහා ඉහළට ඔසවා තබමි, කෙසේ වෙතත් මට පෙන්වා දීමට අවශ්‍ය වන්නේ එය නාමාවලි පුනරාවර්තව සෙවීමට නොපෙනෙන බවයි, එය පරීක්ෂා කරන්නේ වත්මන් නාමාවලියෙහි උප බහලුම් පමණි. මෙය SL6.3 හි ඇත.
ගොඩ්රික් සීරර්

7
එය ඔබගේ කවචය සහ ඔබ සකසා ඇති විකල්ප මත රඳා පවතී. globstarමෙය ක්‍රියාත්මක කිරීම සඳහා බෑෂ් සැකසිය යුතුය .
මයිකල් වයිල්ඩ්

2
Et පීටර්සෙන්නා, වත්මන් 3.9.8 කර්නල් ලේඛනාගාරය සමඟ, විධානය මඟින් wc -l **/*.[ch]පේළි 15195373 ක් සොයා ගනී. ඔබ එය "ඉතා අඩු අගයක්" ලෙස සලකන්නේ දැයි විශ්වාස නැත. නැවතත්, ඔබ globstarBash හි සක්‍රීය කර ඇති බවට වග බලා ගත යුතුය . ඔබට පරීක්ෂා කළ හැකිය shopt globstar. එය පැහැදිලිව සක්‍රීය කිරීමට, කරන්න shopt -s globstar.
මයිකල් වයිල්ඩ්

5
Ic මයිකල්විල්ඩ් මෙය හොඳ විසඳුමකි, නමුත් ARG_MAXඔබ සතුව .phpලිපිගොනු විශාල ප්‍රමාණයක් තිබේ නම් එය තවමත් පිරී ඉතිරී wcයනු ඇත.
මොනිකා නැවත

1
L ඇල්බට් සැමුවෙල් නැත, ඔබට ක්‍රම දෙකෙන්ම නිපදවන ලිපිගොනු ලැයිස්තුව සැසඳිය යුතුය. MethodBroSlow විසින් සඳහන් කර ඇති පරිදි විශාල ගොනු ප්‍රමාණයක් සඳහා වැඩ නොකිරීමේ ගැටලුව මගේ ක්‍රමයට ඇත. නිපදවන මාර්ගවල findඅවකාශයන් තිබේ නම් පිළිගත් පිළිතුර අසමත් වේ. බව භාවිතා කර ස්ථාවර කළ හැකි print0හා --nullසමග findහා xargsපිළිවෙලින්, ඇමතුම්.
මයිකල් වයිල්ඩ්

365

ඔබට භාවිතා කළ හැකිය clocමෙම නිශ්චිත අරමුණ සඳහා ගොඩනගා උපයෝගීතාව . එය එක් එක් භාෂාවේ පේළි ප්‍රමාණය සහ ඒවායින් කීයක් අදහස් දැක්වීම් ආදිය වාර්තා කරයි. CLOC ලිනක්ස්, මැක් සහ වින්ඩෝස් වලින් ලබා ගත හැකිය.

භාවිතය සහ ප්‍රතිදාන උදාහරණය:

$ 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
-------------------------------------------------------------------------------

5
එය ඉතා ඉක්මනින් ධාවනය වන සුන්දර මෙවලමක් වන අතර අවසානයේ ප්‍රයෝජනවත් සංඛ්‍යාලේඛන ලබා දෙයි. ඒකට කැමති.
රොබ් ෆොරස්ට්

4
සිග්වින් (හෝ වෙනත් සමාන වරායන් / පරිසරයන්) භාවිතයෙන් ඔබට වින්ඩෝස් හි යුනික්ස් විධාන ක්‍රියාත්මක කළ හැකි බව සලකන්න. මට නම්, මේ ආකාරයේ ප්‍රවේශයන් අතිශයින්ම ප්‍රයෝජනවත් වීම අත්‍යවශ්‍ය කරුණකි. යුනික්ස් විධාන රේඛාවක් ඉන්ද්‍රජාලික ය. මම විශේෂයෙන් පර්ල් සහ නිත්‍ය ප්‍රකාශන වලට කැමතියි.
කර්ටිස් යාලොප්

CLOC සහ SLOCCount 2015 මැද පොතේ හොඳින් ක්‍රියාත්මක වේ. 127k ජාවා ඇන්ඩ්‍රොයිඩ් ව්‍යාපෘතිය සඳහා ඒවායේ සංඛ්‍යා සමීප නමුත් හරියටම සමාන නොවන බව සලකන්න. IOS සමාන 2x LoC ඇති බව සලකන්න; එබැවින්, SLOCCount හි "පිරිවැය" මෙට්‍රික් අක්‍රිය විය හැකිය (නැතහොත් සමහර විට iOS dev විසින් ඇන්ඩ්‍රොයිඩ්
ඩිව් විසින් නිපදවන

2
clocඑය පර්ල් පිටපතක් පමණක් බැවින් එය හරස් වේදිකාවක් බව පැහැදිලි කිරීම සඳහා මෙම ප්‍රශ්නයේ ආරම්භය සංස්කරණය කිරීම ගැන ඔබ සිතනවාද?
කයිල් ස්ට්‍රෑන්ඩ්

පරිපූර්ණයි, වින්ඩෝස් බෑෂ් වලද හොඳින් ක්‍රියා කරයි.
yurisnm

101

යුනික්ස් වැනි පද්ධති වල, clocකේත සංඛ්‍යාලේඛන සපයන මෙවලමක් ඇත.

මම අපේ කේත පදනමේ අහඹු නාමාවලියක් වෙත දිව ගියෙමි:

      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
තාක්‍ෂණිකව සිම්ටාවෝ එය වින්ඩෝස් භාවිතා කරන්නන් සඳහා විසඳුමක් ලෙස සඳහන් කළ අතර ලිනක්ස් හෝ යුනික්ස් ගැන සඳහන් නොකරයි.
ටිම් සෙගුයින්

5
answer මූස් වගුව ඔහුගේ පිළිතුරට සංස්කරණය කළේ මගේ පිළිතුරට වඩා බොහෝ කලකට පසුවය.
කැල්මේරියස්

මම එයට කැමතියි. ඔරලෝසුව ඇත්තෙන්ම පිළිවෙලයි. නමුත් එම නමේ තේරුම කුමක්ද?
මනෝයෙල් විලෙලා

එය දැන් වින්ඩෝස් වලද ඇත! ඔබට චොකලට් ඇති බව උපකල්පනය කරන්න :choco install cloc
icc97

1
AnManoelVilela ගණන් රේඛා ගණනය කිරීම
busterroni

35

ලිපිගොනු කීයක් තිබේද යන්න හෝ අපේක්ෂිත ප්‍රතිදානය කුමක්දැයි ඔබ සඳහන් කර නැත. ඔබ සොයන්නේ මෙයද:

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

2
බොහෝ ලිපිගොනු නොමැති තාක් කල් මෙය ක්‍රියාත්මක වනු ඇත: ලිපිගොනු විශාල ප්‍රමාණයක් තිබේ නම්, ඔබට එහි ප්‍රති lines ලයක් ලෙස පේළි කිහිපයක් ලැබෙනු ඇත (xargs විසින් ගොනු ලැයිස්තුව උප ලැයිස්තු කිහිපයකින් බෙදනු ඇත)
පැස්කල් මාටින්

ඔව්, ඔව්. ඒ නිසා තමයි මම කිව්වේ ගොනු කීයක් තියෙනවාද කියලා ඔහු සඳහන් කළේ නැහැ. මගේ අනුවාදය මතක තබා ගැනීම පහසුය, නමුත් ඔබට ලිපිගොනු කිහිපයකට වඩා තිබේ නම් ෂින්ගේ අනුවාදය වඩා හොඳය. මම එය ඡන්දය දෙමි.
Paweł Polewicz

මම තනි මිල කැඳවීම් ද සීමා කොහෙද උත්සවයකට, භාවිතා කිරීම සඳහා මෙම අනුවර්තනය වීමට අවශ්ය: 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/* . } ප්රතිඵල සඳහා සමීප slocount වූයේ *.py, නමුත් එය දැන සිටියේ නැත *.js, *.html.
jalanb

33

තවත් විචලනය :)

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

සංස්කරණය කරන්න: මෙය ගොනුව-ගොනුව වෙනුවට මුළු මුදල ලබා දෙනු ඇත.

Edit2: එය ක්‍රියාත්මක කිරීමට .පසුව එකතු කරන්නfind


පිළිතුරු දෙකම රේඛා සාරාංශ කරයි.
josh123a123

අවම වශයෙන් සිග්වින්හි දී, මට වඩා හොඳ ප්‍රති results ල ලැබුණි:$ find -name \*\.php -print0 | xargs -0 cat | wc -l
මාටින් හෙබර්ලි

ඩාවින්ට මෙය විශාල එකතුවක් ලබා දෙයි: find . -name '*.php' | xargs cat | wc -l... නමුත් මෙය ලිපිගොනු සහ විශාල එකතුවක් ලබා දෙයි:find . -name '*.php' | xargs wc -l
ඔසාමාබින්ලොජින්

30

පුදුමයට කරුණක් නම් සොයාගැනීම් -execසහ පදනම් කරගත් පිළිතුරක් නොමැත awk. මෙන්න අපි යනවා:

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

මෙම ස්නිපටය සියලුම ගොනු ( -type f) සඳහා සොයා ගනී . ගොනු දිගුව මගින් සොයා ගැනීමට, භාවිතා කරන්න -name:

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

2
ක්‍රියාකාරීව, මෙය පරිපූර්ණව ක්‍රියා කරයි, නමුත් විශාල ලැයිස්තුගත කිරීම් (ලිනක්ස් ප්‍රභවය) මත එය සැබවින්ම මන්දගාමී වන්නේ එය සියලු ලිපිගොනු සඳහා 1 wc ක්‍රියාවලිය වෙනුවට එක් එක් ගොනුව සඳහා wc ක්‍රියාවලියක් ආරම්භ කරන බැවිනි. තත්පර 1.5 ක කාලයක් හා සසඳන විට මම මෙම ක්‍රමය භාවිතා කරමින් තත්පර 31 ක කාලයක් ගත කළෙමි find . -name '*.c' -print0 |xargs -0 wc -l. මෙම වේගවත් ක්‍රමය (අවම වශයෙන් OS X මත) කිහිප වතාවක්ම “එකතුව” මුද්‍රණය කිරීම අවසන් කරයි, එබැවින් නිසි එකතුවක් ලබා ගැනීම සඳහා අමතර පෙරහන් කිහිපයක් අවශ්‍ය වේ (මම මගේ පිළිතුරෙහි විස්තර පළ කළෙමි).
ඩග් රිචඩ්සන්

අසීමිත ලිපිගොනු සංඛ්‍යාවක් සඳහා වැඩ කිරීමේ වාසිය මෙයයි. හොඳට කලා!
ekscrypto

1
GB සහ ලිපිගොනු විශාල ප්‍රමාණයක් සමඟ වැඩ කිරීමෙන් පසු මෙය වඩා හොඳ විසඳුමකි. එක් කරන්නේ wcඉතා ආකාරයකි මත catපද්ධතිය මුල් (jsons, ගොනු 12k ක 200GB සමග පරීක්ෂා) රේඛා ගණන් ආරම්භ කිරීමට සියලු GB ක්රියාවලිය නිසා මන්දගාමී වේ. wcපළමුව කිරීමෙන් පසුව
ප්‍රති result ලය

1
Og ඩෝග් රිචඩ්සන්, ඔබට මේ වෙනුවට සලකා බැලිය හැකිය: find . -type f -exec wc -l {} \+නැතහොත් find . -name '*.py' -type f -exec wc -l {} \+ ප්‍රතිදානයේ අවසානයේ එකතුවක් මුද්‍රණය කරයි. ඔබ කැමති සියල්ලම එකතුව නම්, ඔබට තව ටිකක් ඉදිරියට ගොස් භාවිතා කළ හැකිය tail: find . -type f -exec wc -l {} \+ | tail -1හෝfind . -name '*.py' -type f -exec wc -l {} \+ | tail -1
ජේමි ජැග්

25

මට වඩා පොදු හා සරල නම්, ඔබට විවිධ නම් දිගු වල ගොනු ගණන් කිරීමට අවශ්‍ය යැයි සිතමු (කියන්න, ස්වදේශිකයන් ද)

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

ප්‍රතිපෝෂණයට ස්තූතියි, මම එය නිවැරදි කර ඇත්තෙමි.


6
මෙය ඔබ සිතන දේ කරන්නේ නැත. සොයා ගන්න. -name ' . [am]' සොයා ගැනීමට සමාන වේ. -name ' . [a | m]' දෙකම
.m

1
නමුත් දෙවැන්න අවසන් වන ලිපිගොනු ද සොයා ගනී. | , යම්. එබැවින් [h | c | cpp | php | cc] [hcp |] ට සමාන වේ.
ඔසාමාබින්ලොජින්

බැක්ටික්ස් අතහැර දමා ඇත, කැමති$()
සැන්ඩ්බර්ග්

මෙය සිග්වින් යටතේ ක්‍රියාත්මක වේ. ඇත්ත වශයෙන්ම, "C: drive" ධාවකය සිග්වින් සම්මුතිය අනුගමනය කළ යුතුය, උදාහරණයක් ලෙස: wc $ (find / cygdrive / c // SomeWindowsFolderj / -type f | egrep "\. (H | c | cpp | php | cc) ")
ක්‍රිස්ටියන් ගින්ග්‍රාස්

21

පොසික්ස්

මෙහි ඇති වෙනත් බොහෝ පිළිතුරු මෙන් නොව, මේවා ඕනෑම POSIX පද්ධතියක, ඕනෑම ගොනු ගණනක් සඳහා සහ ඕනෑම ගොනු නාමයක් සමඟ (සටහන් කර ඇති ස්ථාන හැර) ක්‍රියා කරයි.


එක් එක් ගොනුවේ රේඛා:

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

එක් එක් ගොනුවේ රේඛා, ගොනු මාර්ගය අනුව වර්ග කර ඇත

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

එක් එක් ගොනුවේ රේඛා, පේළි ගණන අනුව වර්ග කර, බැස යයි

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

සියලුම ලිපිගොනු වල මුළු පේළි

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

19

නාමාවලියෙහි කේත රේඛා ගණනය කිරීම සඳහා sloccount නමින් කුඩා මෙවලමක් තිබේ. එය හිස් රේඛා / අදහස් නොසලකා හැරීම, ක්‍රමලේඛන භාෂාවකට ප්‍රති results ල කාණ්ඩගත කිරීම සහ සමහර සංඛ්‍යාලේඛන ගණනය කිරීම නිසා එය ඔබට අවශ්‍ය ප්‍රමාණයට වඩා වැඩි යමක් කරන බව සැලකිල්ලට ගත යුතුය.


කවුළු සඳහා, ලොක්මෙට්‍රික්ස් විසින් කාර්යය ඉටු කරයි
කැමීල්

15

ඔබට අවශ්‍ය වන්නේ සරල forපුඩුවක්:

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

3
යෝජනා කරන පිළිතුරු සමඟ සසඳන විට මෙම අතිරික්තය xargsනොවේද?
නේතන් ෆෙල්මන්

5
නෑ නේතන්. Xargs පිළිතුරු ගණන් කිරීම තනි අංකයක් ලෙස මුද්‍රණය නොකරනු ඇත. එය උපසිරැසි පොකුරක් මුද්‍රණය කළ හැකිය.
රොබ් කෙනඩි

3
ගොනු නාමවල අවකාශ තිබේ නම් මෙම වැඩසටහන කරන්නේ කුමක්ද? නව රේඛා ගැන කුමක් කිව හැකිද? ;-)
Paweł Polewicz

39
ඔබගේ ගොනු නාමවල නව රේඛා තිබේ නම්, මම ඔබට විශාල ගැටළු ඇති බව කියමි.
ක්ස්කායි

2
@ennuikiller මේ සමඟ ඇති ගැටළු ගණන, පළමුව එය හිස් අවකාශයන් සහිත ලිපිගොනු බිඳ දමනු ඇත. ලූපයට IFS=$'\n'පෙර සිටුවීම අවම වශයෙන් සියල්ලන්ටම ඔවුන්ගේ නම්වල නව රේඛා සහිත ලිපිගොනු හැර එය නිවැරදි කරයි. දෙවනුව, ඔබ උපුටා '*.php'දක්වන්නේ නැත , එබැවින් එය කවචයෙන් පුළුල් වන අතර එසේ නොවේ find, එර්ගෝ ඇත්ත වශයෙන්ම උප බහලුම්වල කිසිදු php ගොනු සොයා නොගනී. ද -printඑය වෙනත් ක්රියාමාර්ග නොමැති තුළ අඟවනු ගණන්වල සිට අතිරික්ත වේ.
මොනිකා නැවත

12

ප්‍රභවයන් සඳහා පමණි:

wc `find`

පෙරීමට, grep භාවිතා කරන්න

wc `find | grep .php$`

11

වේගවත් එකක් වනු ඇත, සියලු සෙවුම් / පෙරීමේ බලය භාවිතා කරනු ඇත, findබොහෝ ලිපිගොනු ඇති විට අසමත් නොවනු ඇත (සංඛ්‍යා තර්ක පිටාර ගැලීම), ඒවායේ නමින් විහිලු සංකේත සහිත ලිපිගොනු සමඟ හොඳින් වැඩ කරන්න, භාවිතා නොකර xargs, දියත් නොකරනු ඇත බාහිර විධාන (ස්තූති වැඳුම් පිඳුම් ඉහළ අංකය +සඳහා findගේ -exec). හියර් යූ ගෝ:

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

2
මම මේ පිළිබඳ ප්‍රභේදයක් පළ කිරීමට සූදානම්ව සිටියෙමි (මා නොදැන සිටි \;වෙනුවට +), මෙම පිළිතුර නිවැරදි පිළිතුර විය යුතුය.
මාර්ක් කේ කෝවන්

8

කිසිවෙකු මෙය පිටුපස වළලා ඇති බවක් නොපෙනේ යැයි අනුමාන කරයි ... එහෙත් මේ දක්වා කිසිදු පිළිතුරක් අවකාශයන් සහිත ගොනු නාම පිළිබඳ ගැටලුවට නොගැලපේ. මීට අමතරව, xargsගසෙහි සම්පූර්ණ මාර්ගවල දිග ෂෙල් පරිසර ප්‍රමාණයේ සීමාව ඉක්මවා ගියහොත් (ලිනක්ස් හි මෙගාබයිට් කිහිපයකට පෙරනිමිය) භාවිතා කරන සියල්ල අසාර්ථක වේ. මෙන්න මෙම ගැටළු ඉතා සෘජු ආකාරයකින් විසඳන එකක්. උපසිරැසිය අවකාශය සහිත ලිපිගොනු බලා ගනී. මෙම awkඑක් එක් ගොනුව ඇළ දෙනෙක් ඉන්නවා wcනිමැවුම්, එසේ ඉඩකඩ මදි වීමක් සිදු නොකල යුතුව. එය execලිපිගොනු වලට පමණක් සීමා කරයි (නාමාවලි මඟ හැරීම):

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

7

ප්‍රශ්නය ටැග් කර ඇති බව මම දනිමි , නමුත් ඔබ විසඳීමට උත්සාහ කරන ගැටළුව PHP හා සම්බන්ධ බව පෙනේ.

සෙබස්තියන් බර්ග්මන් විසින් ඔබට අවශ්‍ය දේ කරන PHPLOC නමින් මෙවලමක් ලියා ඇති අතර ඒ මත ඔබට ව්‍යාපෘතියක සංකීර්ණතාව පිළිබඳ දළ විශ්ලේෂණයක් ලබා දේ. මෙය එහි වාර්තාවට උදාහරණයකි:

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

ඔබට පෙනෙන පරිදි, ලබා දී ඇති තොරතුරු සංවර්ධකයෙකුගේ දෘෂ්ටිකෝණයෙන් වඩා බෙහෙවින් ප්‍රයෝජනවත් වේ, මන්දයත් ඔබ එය සමඟ වැඩ කිරීමට පෙර ව්‍යාපෘතියක් කෙතරම් සංකීර්ණද යන්න දළ වශයෙන් ඔබට පැවසිය හැකිය.


6

WC -L? වඩා හොඳ GREP -C use භාවිතා කරන්න

wc -l? වැරදි! wc විධානය නව රේඛා කේත ගණන් කරයි, මිස රේඛා නොවේ ! ගොනුවේ අවසාන පේළිය නව රේඛා කේතයකින් අවසන් නොවන විට, මෙය ගණන් නොගනු ඇත!

ඔබට තවමත් ගණන් රේඛා අවශ්‍ය නම් භාවිතා කරන්න grep -c , සම්පූර්ණ උදාහරණය:

#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

අවසාන වශයෙන්, wc -l උගුල ගැන විමසිල්ලෙන් සිටින්න (ගණන් ඇතුල් වන්නේ රේඛා නොව !!!)


කරුණාකර රේඛාවක POSIX අර්ථ දැක්වීම කියවන්න . සමග grep -c ^ඔබ ගණන් කරනවා අසම්පූර්ණ රේඛා , සහ එවැනි අසම්පූර්ණ රේඛා දී පෙනී සිටීමට නොහැකි පෙළ ගොනුවක් .
gniourf_gniourf

2
මම එය දන්නවා. ප්‍රායෝගිකව අවසාන පේළිය අසම්පූර්ණ විය හැක්කේ එයට EOL නොමැති නිසාය. අදහස අසම්පූර්ණ එකක් ඇතුළුව සියලු රේඛා ගණන් කරයි. සම්පූර්ණ රේඛා පමණක් ගණන් කිරීම ඉතා නිතර සිදුවන වැරැද්දකි. ගණන් කිරීමෙන් පසු අපි සිතන්නේ "ඇයි මට අන්තිම පේළිය මඟ හැරුණේ ???". මෙය පිළිතුර වන්නේ ඇයි, සහ එය නිසි ලෙස කරන්නේ කෙසේද යන්න වට්ටෝරුව.
ස්නික්

නැතහොත්, ඔබට එක් ලයිනර් එකක් අවශ්‍ය නම්: find -type f -name '*.php' -print0 | xargs -0 grep -ch ^ | paste -sd+ - | bc විකල්ප සඳහා මෙහි බලන්න bc: stackoverflow.com/q/926069/2400328
techniao

4

ඉතා සරලව

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

1
එක් ගොනු
නාමයක

4

ඔබේ ප්‍රති results ල පේළි ගණන අනුව වර්ග කිරීමට ඔබට අවශ්‍ය නම්, ඔබට පළමු පිළිතුරට එකතු කළ හැකිය ( | sortහෝ බැසීමේ අනුපිළිවෙල සඳහා), එසේ ය:| sort -r-r

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

1
ප්රතිදානය සිට xargs wc -lසංඛ්යාත්මක වන අතර, එක් ඇත්තටම භාවිතා කිරීමට අවශ්ය වනු ඇත sort -nහෝ sort -nr.
ඩස්ටින් ඉන්ග්‍රම්

4

සඳහා Windows , පහසු සහ ඉක්මන් මෙවලමකි LocMetrics .


වින්ඩෝස් වල OP ඔවුන් බාෂ් භාවිතා කරන්නේ නම් එය බොහෝ දුරට ඉඩ නැත.

1
AnVanessaMcHale ප්‍රශ්න මාතෘකාව සහ විස්තරය යන දෙකටම පැහැදිලිවම යුනික්ස් පමණක් විසඳුමක් අවශ්‍ය නොවේ. එබැවින් වින්ඩෝස් මත පදනම් වූ විසඳුම පිළිගත හැකිය. මම සමාන විසඳුමක් සොයන විට ගූගල් විසින් මෙම පිටුවට මා යොමු කළේය.
walv

මෙම ප්‍රකාශය මට උපකාරවත් විය. මම මෙය උත්සාහ කළ අතර එය හොඳින් ක්‍රියාත්මක වේ.
ඇලන් එෆ්

4

වෙනස් දෙයක්:

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

මෙය හොඳින් ක්‍රියාත්මක වේ, නමුත් ඔබට *.phpදැනට පවතින ෆෝල්ඩරයේ අවම වශයෙන් එක් ගොනුවක් හෝ එහි උප ෆෝල්ඩරයක් තිබිය යුතුය, නැතිනම් wcකුටි



4

ඔබ ලිනක්ස් හි සිටී නම් (මම එය ඔබම ගන්නෙමි), මම නිර්දේශ කරන්නේ මගේ මෙවලම පොලිග්ලොට් ය . එය නාටකාකාර ලෙස වඩා වේගයෙන් එක්කෝ sloccountහෝ clocඑය වඩා featureful වේ sloccount.

ඔබට එය කැඳවිය හැකිය

poly .

හෝ

poly

එබැවින් එය සමහර කැටි ගැසුණු බාෂ් ස්ක්‍රිප්ටයට වඩා පරිශීලක-හිතකාමී ය.


4

Zsh ග්ලෝබ් සමඟ එය ඉතා පහසු ය:

wc -l ./**/*.php

ඔබ bash භාවිතා කරන්නේ නම්, ඔබට යාවත්කාලීන කළ යුතුය. බාෂ් භාවිතා කිරීමට කිසිම හේතුවක් නැත.


4

ටෝකී මෙවලම නාමාවලියක කේතය පිළිබඳ සංඛ්‍යාලේඛන පෙන්වයි. ටෝකී විසින් ලිපිගොනු ගණන, එම ලිපිගොනු තුළ ඇති සම්පූර්ණ රේඛා සහ කේතය, අදහස් සහ භාෂාව අනුව කාණ්ඩ කර ඇති හිස් තැන් පෙන්වනු ඇත. ටෝකී මැක්, ලිනක්ස් සහ වින්ඩෝස් වලද ඇත.

ටෝකෙයිහි ප්‍රතිදානය පිළිබඳ උදාහරණයක් පහත පරිදි වේ:

$ 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
-------------------------------------------------------------------------------

ගබඩාවේ ඇති README ගොනුවේ ඇති උපදෙස් අනුගමනය කිරීමෙන් ටෝකී ස්ථාපනය කළ හැකිය .


3

ඔබට සම්පූර්ණ පේළි ගණන අවශ්‍ය නම් ඔබගේ PHP ලිපිගොනු කියමු ඔබ GnuWin32 ස්ථාපනය කර ඇත්නම් වින්ඩෝස් යටතේ වුවද ඉතා සරල එක් පේළියේ විධානයක් භාවිතා කළ හැකිය. මෙවැනි:

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

Find.exe හරියටම කොහේදැයි ඔබ විසින් නියම කළ යුතුය. එසේ නොවුවහොත් වින්ඩෝස් විසින් සපයන ලද FIND.EXE (පැරණි ඩොස් වැනි විධානයන්ගෙන්) ක්‍රියාත්මක වනු ඇත, මන්ද එය බොහෝ විට PATH පරිසරයේ GnuWin32 ට පෙර විය හැකි අතර විවිධ පරාමිතීන් හා ප්‍රති .ල ඇත.

ඉහත විධානයෙහි ඔබ භාවිතා කළ යුත්තේ තනි උපුටා දැක්වීම් නොව පසු-උපුටා දැක්වීම් බව කරුණාවෙන් සලකන්න.


ඉහත උදාහරණයේ දී මම cmd.exe වෙනුවට කවුළු සඳහා බැෂ් භාවිතා කරමි, ඒ නිසා ඉදිරි කප්පාදුව "/" ඇති අතර පසුපස කප්පාදුව "\" නොවේ.
නෙවන් බොයනොව්

3

පළමුවෙන්ම දීර් long තම ලිපිගොනු ලබා දීම (එනම්, සමහර විට මෙම දිගු ලිපිගොනු වලට ප්‍රතිනිර්මාණය කිරීමේ ආදරය අවශ්‍යද?), සහ සමහර විකුණුම් නාමාවලි හැර:

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

3

ඔබට එය සරළව තබා ගැනීමට අවශ්‍ය නම්, අතරමැදියා කපා wcසියලු ගොනු නාමයන් සමඟ අමතන්න :

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

හෝ නූතන වාක්‍ය ඛණ්ඩයේ:

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

කිසිදු නාමාවලි නාමයක හෝ ගොනු නාමයක ඉඩක් නොමැති තාක් කල් ක්‍රියා කරයි. ඔබට ලිපිගොනු දස දහස් ගණනක් නොමැති තාක් කල් (නවීන කවච සැබවින්ම දිගු විධාන රේඛාවලට සහය දක්වයි). ඔබේ ව්‍යාපෘතියේ ලිපිගොනු 74 ක් ඇත, එබැවින් ඔබට වර්ධනය වීමට ඕනෑ තරම් ඉඩ තිබේ.


මම මේකට කැමතියි! ඔබ දෙමුහුන් සී / සී ++ පරිසරයක සිටී නම්:wc -l `find . -type f \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -print`
බ්‍රැම්

පුදුමයට පත් වූයේ එය ඉහළම පිළිතුර
නොවීමයි

3

විධාන මතක තබා ගැනීමට ඔබට මේ සියල්ල සංකීර්ණ හා දුෂ්කර නොවේ. ඔබට අවශ්‍ය වන්නේ රේඛීය කවුන්ටරය නම් මෙවලමක් පමණි .

ඉක්මන් දළ විශ්ලේෂණයක්

ඔබට මෙවලම ලැබෙන ආකාරය මෙයයි

$ pip install line-counter

lineවත්මන් නාමාවලිය යටතේ ගොනු ගණන සහ රේඛා ගණන ලබා ගැනීමට විධානය භාවිතා කරන්න (පුනරාවර්තන ලෙස)

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

ඔබට වැඩි විස්තර අවශ්‍ය නම් භාවිතා කරන්න 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

මෙම මෙවලමෙහි හොඳම කොටස නම්, ඔබට .gitignoreඑයට ගොනුව වින්‍යාස කිරීම වැනි එකතු කළ හැකිය . '.Gitignore' හි ඔබ කරන දේ මෙන් ගණනය කළ යුතු ලිපිගොනු තෝරා ගැනීමට හෝ නොසලකා හැරීමට ඔබට නීති සැකසිය හැකිය.

වැඩි විස්තර සහ භාවිතය මෙහි ඇත: https://github.com/MorganZhang100/line-counter


3

ලිපිගොනු ඕනෑවට වඩා නම්, මුළු පේළි ගණන සොයා බැලීම වඩා හොඳය.

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

3

ඔබට codel( සබැඳිය ) නම් උපයෝගීතාවයක් භාවිතා කළ හැකිය . වර්ණවත් හැඩතල ගැන්වීම් සහිත රේඛා ගණනය කිරීම සඳහා සරල පයිතන් මොඩියුලයකි.

ස්ථාපනය

pip install codel

භාවිතය

C ++ ලිපිගොනු රේඛා ගණනය කිරීම සඳහා ( .cppසහ .hදිගු සමඟ ) භාවිතා කරන්න:

codel count -e .cpp .h

.Gitignore ආකෘතියෙන් ඔබට සමහර ගොනු / ෆෝල්ඩරය නොසලකා හැරිය හැකිය:

codel count -e .py -i tests/**

එය tests/ෆෝල්ඩරයේ ඇති සියලුම ගොනු නොසලකා හරිනු ඇත .

ප්‍රතිදානය පෙනේ:

දිගු ප්‍රතිදානය

ඔබට -sධජය සමඟ ප්‍රතිදානය කෙටි කළ හැකිය . එය එක් එක් ගොනුවේ තොරතුරු සඟවන අතර එක් එක් දිගුව පිළිබඳ තොරතුරු පමණක් පෙන්වයි. උදාහරණය පහතින්:

කෙටි ප්‍රතිදානය

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.