উত্তর:
আপনার এই মত একটি কমান্ড ব্যবহার করা উচিত:
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। findJherran এর উত্তরে সমাধান সাবডিরেক্টরি মধ্যে নামা হবে। যদি এটি না চাওয়া হয় তবে এর পরিবর্তে শেলটি ব্যবহার করুন:
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'
অবশেষে, আপনি যদি উপ-ডিরেক্টরিতে অবতরণ করতে চান তবে আপনি এটি bash4 বা তদূর্ধে ব্যবহার করতে পারেন :
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বাস্তবায়ন ( আকারে বিষয়বস্তুতে বাইট সংখ্যা হ্রাস) সহ ফাইল আকারে ফাইল সাজায়।