मैं ls द्वारा मुद्रित फ़ाइलों की संख्या को कैसे सीमित करूं?


89

क्या lsकमांड पर सूचीबद्ध फ़ाइलों की मात्रा को सीमित करने का एक तरीका है ?

मैंने देखा है:

ls | head -4

लेकिन पाने के लिए headया tailनिष्पादित होने के लिए मुझे lsनिष्पादन समाप्त करने के लिए प्रतीक्षा करने की आवश्यकता है , और निर्देशिकाओं के साथ एक उत्साही मात्रा में फाइलें हैं जो काफी समय ले सकती हैं।

मैं एक lsकमांड निष्पादित करना चाहता हूं जो उस headकमांड का उपयोग किए बिना सीमित हो ।

जवाबों:


109

आपने कोशिश की है

ls -U | head -4

यह सॉर्टिंग को छोड़ देना चाहिए, जो कि शायद lsइतना लंबा समय ले रहा है।

https://stackoverflow.com/questions/40193/quick-ls-command


"ls -U" अभी भी प्रिंट से पहले पूरी निर्देशिका को पढ़ता है ... मुझे लगता है कि मैं फ़ाइलों को सीमित करने के लिए एक छोटी सी स्क्रिप्ट लिखूंगा, लेकिन यह प्रश्न लिंक अच्छी पठन सामग्री है। धन्यवाद niko।
आंद्रेडुराओ

5
@AndreDurao, GNU ls -Uजरूरी नहीं है कि मुद्रण से पहले पूरी निर्देशिका पढ़ें। strace -e getdents,write ls -U > /dev/nullउदाहरण के लिए एक बड़ी निर्देशिका में प्रयास करें ।
स्टीफन चेज़लस

बस एक नोट: यदि आप dtrace के लिए OSX लुक पर स्ट्रेस को अंजाम देना चाहते हैं, तो स्ट्रेस कमांड एक लिनक्स यूटिलिटी है
AndreDurao

12

यदि आपके संस्करण में lsफ़ाइलों को क्रमबद्ध नहीं करने का एक तरीका है, जैसे कि -UGNU ls , तो इसका उपयोग करें। कोई विकल्प नहीं है, lsपहले सभी फाइलों को पढ़ेंगे, फिर नामों को क्रमबद्ध करेंगे, फिर प्रिंट करना शुरू करेंगे।

एक और संभावना है find, चलाने के लिए , जो नामों को प्रिंट करता है क्योंकि यह उन्हें ढूंढता है।

find . -name . -o -prune | head

(ध्यान दें कि जब headसे लाइनों पर काम कर रहा है , यह मान लेता है कि फ़ाइल नाम में न्यूलाइन वर्ण नहीं हैं)।


1
ध्यान दें कि GNU के मामले में find(जैसे कि बिजीबॉक्स या हिरलूम findया GNU के विपरीत ls -U), ऐसा लगता है कि यह प्रिंट करने के लिए शुरू करने से पहले पूरी निर्देशिका को पढ़ता है।
स्टीफन चेज़लस

4

शायद आप के अलावा एक उपकरण की जरूरत है ls?

उदाहरण के लिए, रैंडल श्वार्ट्ज के पास बड़ी निर्देशिकाओं का उपयोग perlकरने के बारे में एक ब्लॉग प्रविष्टि है जिसमें आपकी आवश्यकताओं को पूरा करने वाले कुछ निर्माण पर कुछ संकेत हो सकते हैं।

ब्लॉग पोस्टिंग में, रान्डल बताते हैं कि दोनों lsऔर findकिसी भी छपाई से पहले सभी निर्देशिका प्रविष्टियों में पढ़ने का प्रयास करते हैं, जबकि perlवह जो समाधान प्रस्तावित करता है वह नहीं करता है।


मैंने यह भी सोचा कि यह सबसे अच्छा विकल्प हो सकता है, क्योंकि दोनों ls और मुद्रण से पहले पूरी निर्देशिका को पढ़ते हैं। मैं मोती के बजाय ऐसा करने के लिए एक रूबी स्क्रिप्ट लिखने की योजना बना रहा था, उस AFresh1 के लिए धन्यवाद!
आंद्रे दाउराव

1
@AndreDurao, perlशायद readdir(3)पसंद करता है lsया findreaddir(3)जीएनयू / लिनक्स के वर्तमान संस्करणों पर कम से कम getdents()सिस्टम कॉल को एक बड़ी गिनती के साथ कहते हैं (जो कि वास्तव में सिस्टम कॉल की संख्या को कम करके प्रदर्शनों का अनुकूलन करता है)। लेकिन आपके मामले में, यदि आप कम फाइलें चाहते हैं, तो ऐसा लगता है कि आपको इसके बजाय readdirBSDs getdirentries(3)या getdents(2)सिस्टम कॉल को बायपास करना होगा ।
स्टीफन चेज़लस

3

यदि प्रदर्शन चिंता का विषय नहीं है (जैसा कि इस प्रश्न के डुप्लिकेट के रूप में बंद किया गया था), और आप lsगैर की सूची में पहली n फाइलें (आउटपुट के पहले n लाइनों के विपरीत ) सूचीबद्ध करना चाहते हैं। फ़ाइल नाम द्वारा छांटी गई छिपी हुई फाइलें zsh, आप उपयोग कर सकते हैं:

ls -ld -- *([1,4])

पहले 4 फाइलों को सूचीबद्ध करने के लिए। zshहालाँकि, निर्देशिका की पूरी सामग्री को अभी भी पढ़ेंगे, भले ही आप इसे क्रमबद्ध न करने को कहें *(oN[1,4])(ध्यान दें कि ls यह सूची भी क्रमबद्ध हो )।


1

शायद कम अपनी आवश्यकताओं के लिए बेहतर अनुकूल है?

 ls /usr/bin | less

मेरे लिए, यह क्लासिक HDD के साथ 5 साल पुराने लैपटॉप पर तुरंत काम करता है, लेकिन सिर भी उतना ही तेज़ है।

आप lessसमय से पहले समाप्त कर सकते हैं q

मुझे लगता है कि 1s देरी के स्रोत के बारे में आपकी धारणा गलत है, लेकिन शायद यह आपके यूनिक्स-स्वाद या आपके शेल, कम या हेड कमांड पर निर्भर करता है।

लिनक्स पर, GNU-ls के साथ,

 ls -R /usr | less 

मेरे लिए तुरंत आउटपुट देना शुरू कर देता है, जबकि पूरा आउटपुट अन्डर रनिंग चल रहा है - इसलिए कम शुरू होने से पहले यह निश्चित रूप से समाप्त नहीं होता है। आप जाँच कर सकते हैं, यदि आपके पास आउटपुट के आधार पर 1s या शायद अधिक की निरंतर देरी है या नहीं।

मुझे लगता है कि आपके 1s देरी का एक अलग कारण है, शायद एचडीडी सोने जा रहा है और एक जागने की आवश्यकता है?

क्या आपके पास बहुत कम फाइलों के लिए भी इतनी देरी है?


धन्यवाद, लेकिन मैं ऐसा कुछ नहीं देख रहा था। जैसे सिर को कम पूरे lsपरिणाम के परिणाम के साथ निष्पादित किया जाता है । मैं परिणामों को सीमित करने के लिए खुद को ls करने का एक तरीका ढूंढ रहा था।
आंद्रेडुराओ

@AndreDurao: मेरी टिप्पणियों को उत्तर में स्थानांतरित कर दिया।
यूजर अनजान

0
ls -lrth | tail

ls -lrth | tail -n 10

ls -lrth | grep *.gz | tail

मैं क्षमा अभिषेक हूँ, लेकिन इस सवाल का बिंदु लाभ उठाने के लिए है lsबैश पर आदेश। पाइप्ड कमांड की तरह grep, head, tailया दूसरों के बाद क्रियान्वित कर रहे हैंls
AndreDurao

0
$ cut -f 1,n filename

पहली nफ़ाइलों को लाने का कार्य करेगा । nउन फ़ाइलों की संख्या है जिन्हें आप निकालना चाहते हैं। इतना पूरा कोड होगा:

$ ls|cut -f 1,n file

1
ls | cut -f 1,n fileआपके द्वारा सुझाई गई कमांड पाठ की प्रत्येक पंक्ति में पहले और nth फ़ील्ड को fileआउटपुट करेगी, और इसके आउटपुट को पूरी तरह से अनदेखा कर देगी ls। यह वह नहीं करता है जो मूल पोस्टर की आवश्यकता है।
टेल्कोएम

हाँ आप सही हैं। एक सुधार करें इसे ls | सिर- एन ... यह निश्चित रूप से कार्य करेगा।
रमनदीप सिंह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.