উত্তর:
আপনার এই মত একটি কমান্ড ব্যবহার করা উচিত:
find /group/book/four/word/ -type f -exec wc -l {} + | sort -rn
find
: আপনি যে পথে চান ফাইলের জন্য অনুসন্ধান করুন। আপনি যদি এটি পুনরাবৃত্তি করতে না চান এবং আপনার find
বাস্তবায়ন এটি সমর্থন করে তবে -maxdepth 1
আপনার -exec
বিকল্পের ঠিক আগে যোগ করা উচিত ।exec
: wc -l
প্রতিটি ফাইলের মধ্যে কমান্ড আদেশ দেয় ।sort -rn
: বিপরীত ক্রমে ফলাফলগুলিকে সাংখ্যিকভাবে বাছাই করুন। বৃহত্তর থেকে নিম্নে।(এটি ধরে নিয়েছে যে ফাইলের নামগুলিতে নতুন লাইন অক্ষর নেই)।
wc
একটি total
লাইনও প্রিন্ট করবে , সুতরাং এখানে কেবল একটি ফাইল না থাকলে আপনি এক বা একাধিক "মোট" লাইন পাবেন । grep /
এগুলি সরাতে আপনি পাইপ করতে পারেন।
sort
কমান্ডের কারণে upvote
সম্ভবত আপনার পুনরাবৃত্তির প্রয়োজন না হলে সবচেয়ে সহজ সংস্করণ:
wc -l /group/book/four/word/*|sort -n
wc
-l
প্রতিটি (তবে লুকানো) ( *
) এর অধীনে থাকা ফাইলগুলিতে লাইনগুলি (বিকল্প ) গণনা করে /group/book/four/word/
এবং sort
ফলাফলটি (পাইপের মাধ্যমে |
) সংখ্যাসূচকভাবে (বিকল্প -n
) সাজান ।
কেউ এই উত্তরটি grep -rlc
দমন করার আগে উল্লেখ করে একটি মন্তব্য করেছিলেন । প্রকৃতপক্ষে grep
একটি দুর্দান্ত বিকল্প, বিশেষত যদি আপনার পুনরাবৃত্তি প্রয়োজন:
grep -rc '^' /group/book/four/word/|tr ':' ' '|sort -n -k2
ডিরেক্টরিতে (অপশন -c
) পুনরাবৃত্তির সাথে (বিকল্প -r
) লাইনগুলি মিলবে ( grep
) '^'
, যা লাইনের শুরু ) গণনা করবে /group/book/four/word/
। তারপরে আপনাকে কোলনটি একটি স্থান দ্বারা প্রতিস্থাপন করতে হবে, উদাহরণস্বরূপ ব্যবহার করে tr
, সহায়তা করার জন্য sort
, যা আপনি -n
দ্বিতীয় কলামে (বিকল্প -k2
) সংখ্যায় (বিকল্প ) বাছাই করতে চান ।
আপডেট: সম্ভাব্য সীমাবদ্ধতা এবং কীভাবে আপনি বাস্তবে পরিত্রাণ পেতে পারেন সে সম্পর্কে স্টিফেনের মন্তব্য দেখুন tr
।
grep -c .
কমপক্ষে একটি বৈধ অক্ষরযুক্ত রেখাগুলি গণনা করে। grep -c '^'
সমস্ত লাইন গণনা করতে ব্যবহার করুন (কিছু grep
বাস্তবায়নের সাথে শেষ নিউলাইনের পরেও অনুসরণযোগ্য অক্ষর গণনা করা হবে )। নোট করুন যে সমস্ত grep
বাস্তবায়ন একটি সমর্থন করে না -r
এবং আচরণের ক্ষেত্রেও তারতম্য হয়। :
স্থানগুলির জন্য আপনাকে (কোলন, অর্ধিকোলন নয়) অনুবাদ করার দরকার নেই sort
। শুধু ব্যবহার -t:
। নোট করুন যে ধরে নিয়েছে যে ফাইলের নামগুলিতে :
খালি বা নিউলাইন অক্ষর নেই।
wc
আপনি যদি একাধিক পথ পাস করেন তবে আমি এ জাতীয় একটি সহজ কাজটি জানতাম না । ওয়াইল্ড কার্ড এবং পাইপের সাথে সেই কার্যকারিতাটি সংযুক্ত sort
করা সত্যিই পরিষ্কার।
সাথে zsh
:
lines() REPLY=$(wc -l < $REPLY)
printf '%s\n' /group/book/four/word/*(.no+lines)
আমরা একটি নতুন বাছাই করা ফাংশনটি সংজ্ঞায়িত করি lines
যা ফাইলে লাইনের সংখ্যার সাথে জবাব দেয়। এবং আমরা o+lines
গ্লোব কোয়ালিফায়ার ব্যবহার করি যা একসাথে n
( সংখ্যাসমূহের জন্য) একত্রিত করে , গ্লোব ফলাফলগুলি কীভাবে অর্ডার করা হয় তা নির্ধারণ করে। ( .
কেবলমাত্র নিয়মিত ফাইলগুলি পরীক্ষা করতে যোগ করা হয়েছে)।
এটি ফাইলের নামগুলিতে লুকানো ফাইলগুলি (যেগুলির সাথে শুরু হয় .
) বাদ দেওয়া হয় সেগুলি ছাড়া অন্য কোন অক্ষর থাকতে পারে সে সম্পর্কে কোনও ধারণা নেই । যোগ D
উল্লিখিত glob কোয়ালিফায়ার যদি আপনি তাদের পাশাপাশি চাই।
bash
...
আপনি যে কোনও সাব-ডিরেক্টরিতে ফাইলগুলি চান তা নির্দিষ্ট করে না /group/book/four/word
। find
Jherran এর উত্তরে সমাধান সাবডিরেক্টরি মধ্যে নামা হবে। যদি এটি না চাওয়া হয় তবে এর পরিবর্তে শেলটি ব্যবহার করুন:
for file in ./*; do [ -f "$file" ] && wc -l "$file"; done | sort -n
যদি আপনার ফাইলের নামগুলিতে নতুন লাইন থাকতে পারে তবে আপনি এর মতো কিছু ব্যবহার করতে পারেন:
for file in ./*; do
[ -f "$file" ] &&
printf "%lu %s\0" "$(wc -l < "$file")" "$file"
done | sort -zn | tr '\0' '\n'
অবশেষে, আপনি যদি উপ-ডিরেক্টরিতে অবতরণ করতে চান তবে আপনি এটি bash
4 বা তদূর্ধে ব্যবহার করতে পারেন :
shopt -s globstar
for file in ./**/*; do [ -f "$file" ] && wc -l "$file"; done | sort -n
নোট করুন যে bash
৪.৩ এর পূর্ববর্তী সংস্করণগুলি পুনরাবৃত্তভাবে ডিরেক্টরি ট্রি (যেমন zsh
'গুলি বা এর tcsh
' ***/*
) নামার সময় প্রতিলিঙ্কগুলি অনুসরণ করছিল ।
এছাড়াও, উপরের সমস্ত সমাধানগুলি লুকানো ফাইলগুলি উপেক্ষা করবে (যাদের নাম একটি দিয়ে শুরু হয় .
, shopt -s dotglob
তাদের অন্তর্ভুক্ত করার জন্য ব্যবহার করুন) এবং প্রতীকী লিঙ্কগুলির লাইন গণনাও অন্তর্ভুক্ত করা হবে (যা find
পদ্ধতির কাছে আসবে না)।
-xtype f
বা *(-.)
zsh এ) এবং লুকানো ফাইলগুলি বাদ দেবে।
%lu
এ printf
? আমার স্মরণ হিসাবে, এর অর্থ দীর্ঘ স্বাক্ষরযুক্ত দশমিক, এটি কি সত্যিই প্রয়োজনীয়? সংখ্যাকে স্ট্রিং হিসাবে ব্যবহার করবেন না কেন? এটা কি কোন পার্থক্য তৈরি করছে?
0
খালি স্ট্রিংয়ের পরিবর্তে এটি প্রসারিত হবে যা কিছুটা ভাল। কিছু সাজানো প্রয়োগগুলি স্বাক্ষরিত স্বাক্ষরযুক্ত ইন্টিজারের সাথে কাজ করে। %lu
সুরক্ষিত বেটের মতো শোনাচ্ছে তবে আপনার 2^31
লাইন রয়েছে বলে মনে হয় এটি কোনও ব্যাপার নয় , যাইহোক এটি বয়সগুলি গ্রহণ করবে will
আপনি যদি fd
মরিচায় লেখা একটি খুব দ্রুত ফাইল সন্ধানকারী ইনস্টল করতে চান (আপনার এটি ইনস্টল করা উচিত, যাইহোক এটি দুর্দান্ত)
fd --type=file . | xargs wc -l | sort -n
মূলত fd
ফাইলগুলি তালিকাভুক্ত করে, xargs ফাইলগুলির তালিকাটি পাস করবে wc
(শব্দের গণনার জন্য দাঁড়ায় তবে পাসিং -L এটি লাইন গণনা করবে) তারপরে অবশেষে এটি সর্বনিম্ন সংখ্যার লাইন থেকে বৃহত্তর ব্যবহার করে সাজানো হবে sort -n
।
ls -l
লাইনের সংখ্যা দেয় নাls -lS
কিছুls
বাস্তবায়ন ( আকারে বিষয়বস্তুতে বাইট সংখ্যা হ্রাস) সহ ফাইল আকারে ফাইল সাজায়।