जवाबों:
आपको इस तरह से एक कमांड का उपयोग करना चाहिए:
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कमांड के कारण अपवोट
यदि आपको पुनरावृत्ति की आवश्यकता नहीं है तो संभवतः सबसे सरल संस्करण:
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:। ध्यान दें कि फ़ाइल नामों में मान है :या रिक्त या newline वर्ण नहीं हैं।
wcअगर आप एक से अधिक रास्तों से गुजरते हैं तो मुझे इस तरह का कोई आसान काम नहीं मिला । वाइल्ड कार्ड और पाइप के साथ कार्यक्षमता को युग्मित करना sortवास्तव में साफ है।
के साथ zsh:
lines() REPLY=$(wc -l < $REPLY)
printf '%s\n' /group/book/four/word/*(.no+lines)
हम एक नए सॉर्टिंग फ़ंक्शन को परिभाषित करते हैं linesजो फ़ाइल में लाइनों की संख्या के साथ उत्तर देता है। और हम o+linesग्लोब क्वालीफायर का उपयोग करते हैं जो n(संख्यात्मक प्रकार के लिए) एक साथ परिभाषित करता है कि ग्लोब के परिणाम कैसे क्रमबद्ध हैं। ( .यह भी केवल नियमित फ़ाइलों की जाँच करने के लिए जोड़ा गया है)।
यह इस बात पर कोई अनुमान नहीं लगाता है कि फ़ाइल के नाम में छिपी हुई फ़ाइलों के अलावा कौन-से अक्षर हो सकते हैं (जो शुरू होते हैं .) छोड़ दिए जाते हैं। Dग्लोब क्वालीफायर जोड़ें यदि आप उन्हें भी चाहते हैं।
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'
अंत में, यदि आप कर उपनिर्देशिका में उतर करना चाहते हैं, तो आप इस में उपयोग कर सकते हैंbash 4 या इसके बाद के संस्करण :
shopt -s globstar
for file in ./**/*; do [ -f "$file" ] && wc -l "$file"; done | sort -n
ध्यान दें कि bash4.3 से पहले के संस्करण, सहानुभूति का पालन कर रहे थे जब निर्देशिका पेड़ की पुनरावृत्ति होती है (जैसेzsh 'या tcsh' s ***/*) के ।
इसके अलावा, ऊपर दिए गए सभी समाधान छिपी हुई फ़ाइलों को अनदेखा कर देंगे (जिनके नाम के साथ शुरू होता है ., shopt -s dotglobउन्हें शामिल करने के लिए उपयोग करें) और इसमें प्रतीकात्मक लिंक की लाइन गणना भी शामिल होगी (जो findदृष्टिकोण नहीं होगा)।
-xtype fGNU में या *(-.)zsh में) के लिए सिम्लिंक पर भी विचार करेगा और छिपी हुई फ़ाइलों को छोड़ देगा।
%luमें printf? जैसा कि मुझे याद है, इसका मतलब है कि लंबे समय तक अहस्ताक्षरित दशमलव, क्या यह वास्तव में आवश्यक है? संख्या को स्ट्रिंग के रूप में क्यों नहीं माना जाता है? क्या इससे कोई फर्क पड़ता है?
0खाली स्ट्रिंग के बजाय विस्तारित होगी , जो थोड़ा बेहतर है। कुछ प्रकार के कार्यान्वयन बिना हस्ताक्षर किए पूर्णांक के साथ काम करते हैं। %luसबसे सुरक्षित शर्त की तरह लगता है, लेकिन शायद यह मायने नहीं रखता है जैसे कि आपके पास 2^31लाइनें हैं, वैसे भी उम्र लग जाएगी।
यदि आप fdरस्ट में लिखी एक बहुत तेज़ फ़ाइल खोजक स्थापित करना चाहते हैं (आपको इसे स्थापित करना चाहिए, वैसे भी यह बहुत अच्छा है)
fd --type=file . | xargs wc -l | sort -n
मूल रूप fdसे फ़ाइलों को सूचीबद्ध करता है, xargs फ़ाइलों की सूची को पास करेगा wc(शब्द गणना के लिए खड़ा है, लेकिन पासिंग -l इसे गिनती लाइनें बना देगा) फिर अंत में इसे कम से कम लाइनों की संख्या से सबसे बड़ी उपयोग करने के लिए हल किया जाता है sort -n।
ls -lलाइनों की संख्या नहीं देता है।ls -lSकुछlsकार्यान्वयन के साथ आकार फ़ाइल प्रकार ( आकार सामग्री में बाइट्स की संख्या)।