आकार द्वारा आदेशित सभी फ़ाइलों को कैसे सूचीबद्ध करें


241

मैं आकार में बड़े से छोटे के क्रम में सभी फाइलों को सूचीबद्ध करना चाहता हूं और फाइलें एक निश्चित फ़ोल्डर में कहीं भी मौजूद हो सकती हैं।



5
से man ls:-S sort by file size
ctrl-alt-delor-

क्या आपका मतलब है "फाइलें इस निर्देशिका में हैं", या "फाइलें किसी भी उप-निर्देशिका में हो सकती हैं"।
ctrl-alt-delor-

यदि आप GUI टूल का उपयोग करने में सक्षम हैं / चाहते हैं, तो QDirStat पर एक नज़र डालें , पूर्व में KDirStat
RhinoDevel

जवाबों:


290

बस कुछ का उपयोग करें:

ls -lS /path/to/folder/

राजधानी एस

यह फ़ाइलों को आकार के आधार पर क्रमबद्ध करेगा।

और देखें:

man ls

-S     sort by file size

यदि आप रिवर्स ऑर्डर में सॉर्ट करना चाहते हैं , तो बस -rस्विच जोड़ें ।

अपडेट करें:

निर्देशिका को बाहर करने के लिए (और फ़ाइल नाम या सिम्लिंक लक्ष्य में से कोई भी नई वर्णों को शामिल नहीं किया गया है):

ls -lS | grep -v '^d' 

अपडेट 2:

मैं अब देखता हूं कि यह अभी भी प्रतीकात्मक लिंक कैसे दिखाता है, जो कि फ़ोल्डर्स हो सकते हैं। सांकेतिक लिंक हमेशा एक अक्षर l से शुरू होते हैं, जैसा कि लिंक में है।

एक के लिए फ़िल्टर करने के लिए कमांड बदलें -। यह केवल नियमित फ़ाइलें छोड़नी चाहिए:

ls -lS | grep '^-'

मेरे सिस्टम पर यह केवल नियमित फाइल दिखाता है।

अद्यतन ३:

पुनरावर्ती को जोड़ने के लिए, मैं sortकमांड के लिए लाइनों की छंटाई को छोड़ दूंगा और यह बताने के लिए 5 वें कॉलम का उपयोग करूंगा ।

ls -lR | grep '^-' | sort -k 5 -rn

-rnमतलब सबसे बड़ी फाइल को सबसे ऊपर लाने के लिए रिवर्स और न्यूमेरिक। इस कमांड का डाउन साइड यह है कि यह फाइलों का पूरा रास्ता नहीं दिखाता है।

यदि आपको फ़ाइलों के पूर्ण पथ की आवश्यकता है, तो कुछ इस तरह का उपयोग करें:

find . -type f  -exec du -h {} + | sort -r -h

findआदेश रिकर्सिवली के सभी उप निर्देशिका में सभी फ़ाइलों को मिलेगा .और कॉल du -h(जिसका अर्थ है डिस्क उपयोग -humanreadable ) और उसके बाद फिर उत्पादन को सॉर्ट। अपने तो find/ sortसमर्थन नहीं करता है -h, के साथ बदलें du -kऔर sort -rn। ध्यान दें कि आकार और डिस्क का उपयोग एक ही बात नहीं है।


5
duडिस्क का उपयोग देता है जो फ़ाइल आकार से अलग है। जीएनयू (जीएनयू) के साथ du -h, संख्यात्मक प्रकार काम नहीं करेगा (आपको -hसॉर्ट करने के लिए जीएनयू विकल्प की आवश्यकता होगी )। xargs संभवतः इनपुट के रूप में उद्धृत शब्दों की एक सूची की उम्मीद करता है, तो यह काम नहीं करेगा यदि फ़ाइलनाम में रिक्त या उद्धृत वर्ण होते हैं।
स्टीफन चेजेलस

1
मुझे लगता है कि -S आकार के क्रम को अवरोही करता है, आरोही क्रम के बारे में क्या?
डेमॉन्गोलम

3
@ स्टीफनचेज़ेलस के बाद, यह मेरे लिए काम करता है find . -type f -print0 | xargs -0 du -h | sort -rh:। यदि आप केवल सबसे बड़ी 30 फाइलें कहना चाहते हैं find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30:।
user7543

नमस्ते! क्या आप कृपया + |सिंटैक्स की व्याख्या कर सकते हैं + | sort -r -h?
विक्टर

@ विक्टर, कृपया unix.stackexchange.com/questions/195939/… देखें ।
हे वोल्फ

25

आप खोज और छाँट जैसे कुछ का उपयोग कर सकते हैं।

find . -type f -ls | sort -r -n -k7

( -lsविकल्प मानक नहीं है, लेकिन कई खोज कार्यान्वयनों में पाया जाता है, न कि केवल जीएनयू एक। जीएनयू खोज और अन्य में, यह ls -liकुछ अपवादों के साथ कुछ समान प्रदर्शित करता है , उदाहरण के लिए, एसीएल के साथ फाइलें एक + के साथ चिह्नित नहीं हैं)

यदि फ़ाइल नामों में GNU खोज और GNU सॉर्ट के साथ नई वर्ण वर्ण हो सकते हैं:

find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'

यह "समूह" कॉलम (-ls से) किसी भी स्थान (इसलिए -7 पैरामीटर) से युक्त नहीं है, लेकिन यह जरूरी नहीं है।
kolistivra

1
बस खोज क्यों नहीं कर रहा है ... -प्रिंट0 | सॉर्ट -zk7rn0?
आंद्रे डी मिरांडा

10

Zsh और GNU ls के साथ:

ls -ldU -- **/*(.OL)

जहां (.OL)एक ग्लोब क्वालीफायर है , केवल नियमित फ़ाइलों .का चयन करने के लिए , लंबाई के अनुसार ऑर्डर करने के लिए (फ़ाइल आकार, आरोही क्रम के लिए, अवरोही के लिए)।OLoO

(ध्यान दें कि zsh के पुराने संस्करणों में 2 ^ 32 से अधिक फ़ाइल आकार के मुद्दे थे)।

कुछ ऑपरेटिंग सिस्टम में एक कमांड को पास की गई तर्क सूची के आकार की सीमा होती है। उन मामलों में, आपको आवश्यकता होगी:

autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU

यदि आप केवल फाइलों की सूची चाहते हैं और विस्तृत आउटपुट नहीं, तो बस करें:

print -rl -- **/*(.OL)

आप छिपा फ़ाइलों को शामिल करने (जिसका नाम एक बिंदु के साथ शुरू होता है, को छोड़कर चाहते हैं .और ..और के रूप में अच्छी तरह से छिपा निर्देशिका खोज), जोड़ने Dग्लोबिंग क्वालीफायर:

print -rl -- **/*(.DOL)

क्या करता .OLहै? क्या वह आज्ञा का हिस्सा है?
अल्फा_989

@ अल्फा_989, संपादन देखें
स्टीफन चेज़लस

स्पष्टीकरण के लिए धन्यवाद, स्टीफन .. हालांकि, किसी कारण के लिए .. कमांड मेरे वर्कस्टेशन पर काम नहीं करता है .. मैं उपयोग कर रहा हूं ls (GNU coreutils) 8.25और zsh 5.1.1 (x86_64-ubuntu-linux-gnu)। यह के कुछ संस्करणों के लिए ही काम करता है lsऔर zsh?
अल्फा_989

@ Alpha_989, किस तरह से यह आपके लिए काम नहीं करता है? यह मेरे लिए उन्हीं संस्करणों के साथ काम करता है और उस कोड में ऐसा कुछ भी नहीं है जो कम से कम 15 साल पहले के संस्करणों में काम न करता हो।
स्टीफन चेज़लस

9

निम्न आकार की फ़ाइलों की सूची बनाना होगा:

ls -lSr

विकल्प हैं:

  • एल: लंबे, विस्तृत उपयोगकर्ता, समूह, अन्य विशेषताओं, तिथि आदि को दर्शाता है।
  • एस: आकार द्वारा लिस्टिंग के आदेश (डिफ़ॉल्ट रूप से अवरोही)
  • r: लिस्टिंग के क्रम को उलट देता है

क्या आप उत्तर की गुणवत्ता में सुधार के लिए विकल्पों की व्याख्या करना चाहेंगे?
रुई एफ रिबेरो

6

यह कहते हुए कि "फाइलें एक निश्चित फ़ोल्डर में कहीं भी मौजूद हो सकती हैं" का अर्थ है कि आप शुरुआती निर्देशिका (फ़ोल्डर) के भीतर सभी निर्देशिकाओं (फ़ोल्डरों) को पुन: प्राप्त करना चाहते हैं। यह वही है जो findकरने के लिए है:

find . -type f -exec ls -lSd {} +

यह वर्तमान कार्यशील निर्देशिका ( ) में सभी फ़ाइलों को "ढूंढता है" .। मिली प्रत्येक फ़ाइल के लिए, lsआकार क्रम में पाई गई वस्तुओं को सॉर्ट करने के लिए एक प्रक्रिया चलाई जाती है। +को टर्मिनेटर -execकारण कई तर्क करने के लिए एक सूची के रूप में प्रदान किया जाने वाला ls। जब तक आपकी निर्देशिका (फ़ोल्डर) में बहुत बड़ी संख्या में फाइलें नहीं होती हैं, तो आपके पास एक सूची होनी चाहिए (और इस प्रकार एक प्रक्रिया कांटे की), जिसके परिणामस्वरूप आप चाहते हैं।


1
यह अच्छा है क्योंकि यह आपको फ़ाइल के आकार को अच्छा दिखाने के लिए
l

4

रिवर्स ऑर्डर में फ़ाइल सूची प्रदर्शन: ls -lSrh

आरोही क्रम के लिए: ls -lSh


1
मानव-अनुकूल उत्पादन के लिए -h ध्वज का उपयोग करने के लिए +1।
कंप्यूटिंग

2

मैंने कुछ समय पहले इस हद तक कुछ लिखा था। आप यह निर्दिष्ट करने के लिए एक तर्क पारित कर सकते हैं कि bigआपको 10 में से किस मामले में कितनी फाइलें सूचीबद्ध करनी हैं, या सिर्फ टाइप करना है।

big () { 
    NUM_FILES=10;
    if [ $1 ]; then
        NUM_FILES=$1;
    fi;
    du | sort -nr | head -n $NUM_FILES
}

2

इन की कोशिश करो, यह मेरे लिए ठीक काम करता है।

$ find /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10

# find /root -type f -exec ls -lS {} + | head -n 10 | awk '{ print $5, $9 }'

हालांकि सही जवाब नहीं है लेकिन कुछ हद तक काम करता है

$ ls -lS |grep  '^-' | head -n 6 

1
awk ठीक काम करता है अगर फ़ाइलनाम में कोई स्थान नहीं है।
एर निम

हाँ .. 'sed' का उपयोग करें और अंडरस्कोर के साथ स्थान बदलें? अगर वह मदद करता है
Sand1512

नहीं, मैं sedआउटपुट में कटौती करने के लिए उपयोग करता हूं
Eir Nym

1

डेल्हा के उत्तर और स्टीफन चेज़लस की टिप्पणी को जोड़ना ...

find -print0के साथ संयुक्त xargs -0रिक्त स्थान / रिक्त स्थान / whatnots के लिए समर्थन जोड़ता है।

du -h | sort -rn अलग-अलग बाइट गुणकों के बीच ठीक से सॉर्ट नहीं करता है, जैसे 1.1M 128K के बाद दिखाएगा, जो गलत है।

sort -rh (- अमानवीय-संख्यात्मक-प्रकार) इसका ध्यान रखता है, लेकिन यह केवल GNU के संस्करण पर काम करता है।

नीचे दिए गए आदेश वांछित आउटपुट प्रदान करेंगे।

मानव-पठनीय, GNU के सॉर्ट / लिनक्स पर:

find . -type f -print0 | xargs -0 du -h | sort -rh

किलोबाइट इकाइयों में, बीएसडी / ओएसएक्स / अन्य पर:

find . -type f -print0 | xargs -0 du -k | sort -rn

BSD / OSX के लिए, https://unix.stackexchange.com/a/188375/82895 भी देखें ।


1

मूल प्रश्न के रूपांतर के रूप में, यदि आप उपनिर्देशिकाओं में संचयी आकार की फाइलों को देखना चाहते हैं:

#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr

आकारों को मेगाबाइट्स ( mइन du -sm) में प्रदर्शित किया जाएगा । गीगाबाइट के लिए किलोबाइट्स द्वारा स्वीकार किए गए अन्य मान duहैं । मानव-पठनीय प्रदर्शन के लिए उपयोग करना संभव नहीं है क्योंकि यह छंटाई को तोड़ देगा।-k-g-h

यहाँ एक संस्करण है जो मेगाबाइट sedके Mलिए संलग्न करने के लिए उपयोग करता है :

find ${1:-.} -maxdepth 1  -type d  -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'

प्रदर्शित करने के लिए निर्देशिका निर्धारित की ${1:-.}जाती है, जिसके माध्यम से यदि उपलब्ध कराए गए पहले कमांड लाइन तर्क का उपयोग किया जाएगा, या वर्तमान निर्देशिका का उपयोग बिना तर्क के किया जाएगा।

नोट: यह बहुत सारी फ़ाइलों के साथ एक लंबा समय ले सकता है। विकल्प -type dकेवल उप-सूची को सूचीबद्ध करेगा और वर्तमान फ़ोल्डर में फ़ाइलों को बाहर करेगा; यदि आप भी वर्तमान फ़ोल्डर में फ़ाइलों को देखना चाहते हैं तो इसे हटा दें।

नोट: आप ncduइसके बजाय उपयोग करना चाह सकते हैं जो कि अधिकांश लिनक्स रिपोज (ubuntu / debian apt install ncdu) के साथ-साथ ओएक्सएक्स ( brew install ncdu) पर उपलब्ध है।

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