bash - এমএল - ট্যাগ কাকে বলে
কিভাবে পুনরাবৃত্তি একটি ডিরেক্টরি কোড সব লাইন গণনা? (20)
WC -L? ভাল ব্যবহার GREP -C ^
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 ফাঁদ জন্য দেখুন (সংখ্যা প্রবেশ করে, লাইন না !!!)
আমরা একটি পিএইচপি অ্যাপ্লিকেশন পেয়েছি এবং একটি নির্দিষ্ট ডিরেক্টরি এবং এর সাবডিরেক্টরি অধীনে কোড সব লাইন গণনা করতে চান। আমরা মন্তব্য উপেক্ষা করতে হবে না, আমরা শুধু একটি রুক্ষ ধারণা পেতে চেষ্টা করছেন।
wc -l *.php
যে কমান্ড একটি নির্দিষ্ট ডিরেক্টরির মধ্যে মহান কাজ করে, কিন্তু সাবডিরেক্টরি উপেক্ষা করে। আমি চিন্তা করতে পারছিলাম এটা কাজ করতে পারে, কিন্তু এটা 74 ফিরে আসছে, যা নিশ্চিতভাবেই হয় না ...
find . -name '*.php' | wc -l
সব ফাইল ফিড সঠিক সিনট্যাক্স কি?
অদ্ভুতভাবে খুঁজে পাওয়া যায় নি এর উপর ভিত্তি করে কোন উত্তর নেই -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 }'
অন্য এক-মাছ ধরার নৌকা জন্য:
( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l
স্পেস সঙ্গে নাম উপর কাজ করে, শুধুমাত্র এক নম্বর আউটপুট।
আপনি cloc.sourceforge.net চেষ্টা করতে পারেন (পার্ল প্রয়োজন)
আপনি কত ফাইল আছে বা পছন্দসই আউটপুট কি উল্লেখ না। আপনি যেটা খুঁজছিলেন এটাই কি সেটা:
find . -name '*.php' | xargs wc -l
আপনি কি চান লুপ for
একটি সহজ:
total_count=0
for file in $(find . -name *.php -print)
do
count=$(wc -l $file)
let total_count+=count
done
echo "$total_count"
আমি জানি যে প্রশ্নটি bash হিসাবে ট্যাগ করা হয়েছে, কিন্তু মনে হচ্ছে যে আপনি যে সমস্যার সমাধান করার চেষ্টা করছেন তাও পিএইচপি সম্পর্কিত।
সেবাস্তিয়ান বার্গম্যান 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
আপনি যেমন দেখতে পারেন, প্রদত্ত তথ্য বিকাশকারীর দৃষ্টিকোণ থেকে অনেক বেশি উপকারী, কারণ এটি আপনাকে প্রায়শই বলতে পারে যে কোনও প্রকল্পটি আপনার সাথে কাজ শুরু করার আগে কত জটিল।
ইউনিক্স-এর মতো সিস্টেমে 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
-------------------------------------------------------------------------------
এখনো অন্য বৈচিত্র :)
$ find -name '*.php' | xargs cat | wc -l
সম্পাদনা: এটি ফাইল-বাই-ফাইলের পরিবর্তে মোট সমষ্টি দেবে।
কমপক্ষে OS X তে, অন্য কিছু উত্তরগুলিতে তালিকাভুক্ত করা + xarg + wc কমান্ডগুলি বড় তালিকাগুলিতে "মোট" বার বার মুদ্রণ করে এবং কোনও সম্পূর্ণ মোট দেওয়া হয় না। আমি নিম্নলিখিত কমান্ড ব্যবহার করে .c ফাইলগুলির জন্য একক মোট পেতে সক্ষম হয়েছিলাম:
find . -name '*.c' -print0 |xargs -0 wc -l|grep -v total|awk '{ sum += $1; } END { print "SUM: " sum; }'
ডিরেক্টরির মধ্যে কোড লাইন গণনা করার জন্য sloccount নামে একটি ছোট টুল আছে। এটি উল্লেখ করা উচিত যে এটি খালি লাইন / মন্তব্যগুলিকে উপেক্ষা করে আপনি যত বেশি চান, প্রোগ্রামিং প্রোগ্রামের ফলাফলগুলি গ্রুপ করে এবং কিছু পরিসংখ্যান গণনা করে।
প্রথমে দীর্ঘতম ফাইলগুলি প্রদান করা হচ্ছে (অর্থাত এই দীর্ঘ ফাইলগুলিকে কিছু পুনঃনির্মাণের ভালোবাসা দরকার?), এবং কিছু বিক্রেতা ডিরেক্টরি বাদ দিয়ে:
find . -name '*.php' | xargs wc -l | sort -nr | egrep -v "libs|tmp|tests|vendor" | less
যদি আপনার GNUWin32 ইনস্টল করা থাকে তবে আপনার উইন্ডোজ ফাইলগুলি কেবলমাত্র লাইনগুলির মোট নম্বরের প্রয়োজনে উইন্ডোজ ফাইলগুলির অধীনে খুব সাধারণ এক লাইন কমান্ড ব্যবহার করতে পারেন। এটার মত:
cat `/gnuwin32/bin/find.exe . -name *.php` | wc -l
উইন্ডোজটি FIND.EXE (পুরানো ডস-এর মতো কমান্ডগুলি) থেকে উইন্ডোজ পরিবেশিত হয়, এটি সম্ভবত PATH পরিবেশে GnuWin32 এর আগে, এবং তার বিভিন্ন পরামিতি এবং ফলাফল রয়েছে তা জানার জন্য আপনাকে অবশ্যই find.exe ঠিকভাবে উল্লেখ করতে হবে।
অনুগ্রহ করে লক্ষ্য করুন যে উপরের কমান্ডটিতে আপনার ব্যাক-কোটগুলি ব্যবহার করা উচিত, একক উদ্ধৃতি নয়।
যদি আপনি আপনার ফলাফলগুলি লাইন সংখ্যা অনুসারে সাজান চান তবে আপনি কেবল যোগ করতে পারেন | sort
বা | sort -r
প্রথম উত্তর থেকে | sort -r
(ঊর্ধ্বমুখী ক্রম জন্য), যেমন:
find . -name '*.php' | xargs wc -l | sort -r
POSIX
এখানে অন্য বেশিরভাগ উত্তরগুলির বিপরীতে, কোনও 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
উইন্ডোজের জন্য , সহজ এবং দ্রুত সরঞ্জাম LocMetrics হয় ।
আমি এই ইনলাইন-স্ক্রিপ্টটি ব্যবহার করেছি যা আমি src-project এর ডিরেক্টরি থেকে প্রবর্তন করি:
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
যে এই আউটপুট উত্পাদন করে:
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.
ফাঁকা লাইন বাদে
find . -name "*.php" | xargs grep -v -c '^$' | awk 'BEGIN {FS=":"} { $cnt = $cnt + $2} END {print $cnt}'
ফাঁকা লাইন সহ:
find . -name "*.php" | xargs wc -l
আপনি কমান্ড মনে রাখা এই সব জটিল এবং কঠিন প্রয়োজন হয় না। আপনি শুধু লাইন-কাউন্টার বলা একটি টুল প্রয়োজন ।
একটি দ্রুত ওভারভিউ
আপনি এই টুল পেতে কিভাবে
$ 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
যদি আপনি এটি সহজ রাখতে চান তবে মধ্যমস্ত্রীকে কাটান এবং wc
সমস্ত ফাইলের নামগুলির সাথে কল করুন :
wc -l `find . -name "*.php"`
অথবা আধুনিক সিনট্যাক্সে:
wc -l $(find . -name "*.php")
যেহেতু ডিরেক্টরি নাম বা ফাইলের নামগুলির মধ্যে কোনও স্থান নেই তাই যতক্ষন পর্যন্ত কাজ করে। এবং যতক্ষণ আপনার কাছে হাজার হাজার ফাইল নেই (আধুনিক শেল সত্যিই দীর্ঘ কমান্ড লাইন সমর্থন করে)। আপনার প্রকল্পের 74 টি ফাইল আছে, তাই আপনার কাছে প্রচুর পরিমাণে রুম আছে।