मैं आकार में बड़े से छोटे के क्रम में सभी फाइलों को सूचीबद्ध करना चाहता हूं और फाइलें एक निश्चित फ़ोल्डर में कहीं भी मौजूद हो सकती हैं।
man ls
:-S sort by file size
मैं आकार में बड़े से छोटे के क्रम में सभी फाइलों को सूचीबद्ध करना चाहता हूं और फाइलें एक निश्चित फ़ोल्डर में कहीं भी मौजूद हो सकती हैं।
man ls
:-S sort by file size
जवाबों:
बस कुछ का उपयोग करें:
ls -lS /path/to/folder/
राजधानी एस ।
यह फ़ाइलों को आकार के आधार पर क्रमबद्ध करेगा।
और देखें:
-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
। ध्यान दें कि आकार और डिस्क का उपयोग एक ही बात नहीं है।
du
डिस्क का उपयोग देता है जो फ़ाइल आकार से अलग है। जीएनयू (जीएनयू) के साथ du -h
, संख्यात्मक प्रकार काम नहीं करेगा (आपको -h
सॉर्ट करने के लिए जीएनयू विकल्प की आवश्यकता होगी )। xargs संभवतः इनपुट के रूप में उद्धृत शब्दों की एक सूची की उम्मीद करता है, तो यह काम नहीं करेगा यदि फ़ाइलनाम में रिक्त या उद्धृत वर्ण होते हैं।
find . -type f -print0 | xargs -0 du -h | sort -rh
:। यदि आप केवल सबसे बड़ी 30 फाइलें कहना चाहते हैं find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30
:।
+ |
सिंटैक्स की व्याख्या कर सकते हैं + | sort -r -h
?
आप खोज और छाँट जैसे कुछ का उपयोग कर सकते हैं।
find . -type f -ls | sort -r -n -k7
( -ls
विकल्प मानक नहीं है, लेकिन कई खोज कार्यान्वयनों में पाया जाता है, न कि केवल जीएनयू एक। जीएनयू खोज और अन्य में, यह ls -li
कुछ अपवादों के साथ कुछ समान प्रदर्शित करता है , उदाहरण के लिए, एसीएल के साथ फाइलें एक + के साथ चिह्नित नहीं हैं)
यदि फ़ाइल नामों में GNU खोज और GNU सॉर्ट के साथ नई वर्ण वर्ण हो सकते हैं:
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
Zsh और GNU ls के साथ:
ls -ldU -- **/*(.OL)
जहां (.OL)
एक ग्लोब क्वालीफायर है , केवल नियमित फ़ाइलों .
का चयन करने के लिए , लंबाई के अनुसार ऑर्डर करने के लिए (फ़ाइल आकार, आरोही क्रम के लिए, अवरोही के लिए)।OL
o
O
(ध्यान दें कि zsh के पुराने संस्करणों में 2 ^ 32 से अधिक फ़ाइल आकार के मुद्दे थे)।
कुछ ऑपरेटिंग सिस्टम में एक कमांड को पास की गई तर्क सूची के आकार की सीमा होती है। उन मामलों में, आपको आवश्यकता होगी:
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
यदि आप केवल फाइलों की सूची चाहते हैं और विस्तृत आउटपुट नहीं, तो बस करें:
print -rl -- **/*(.OL)
आप छिपा फ़ाइलों को शामिल करने (जिसका नाम एक बिंदु के साथ शुरू होता है, को छोड़कर चाहते हैं .
और ..
और के रूप में अच्छी तरह से छिपा निर्देशिका खोज), जोड़ने D
ग्लोबिंग क्वालीफायर:
print -rl -- **/*(.DOL)
.OL
है? क्या वह आज्ञा का हिस्सा है?
ls (GNU coreutils) 8.25
और zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
। यह के कुछ संस्करणों के लिए ही काम करता है ls
और zsh
?
निम्न आकार की फ़ाइलों की सूची बनाना होगा:
ls -lSr
विकल्प हैं:
यह कहते हुए कि "फाइलें एक निश्चित फ़ोल्डर में कहीं भी मौजूद हो सकती हैं" का अर्थ है कि आप शुरुआती निर्देशिका (फ़ोल्डर) के भीतर सभी निर्देशिकाओं (फ़ोल्डरों) को पुन: प्राप्त करना चाहते हैं। यह वही है जो find
करने के लिए है:
find . -type f -exec ls -lSd {} +
यह वर्तमान कार्यशील निर्देशिका ( ) में सभी फ़ाइलों को "ढूंढता है" .
। मिली प्रत्येक फ़ाइल के लिए, ls
आकार क्रम में पाई गई वस्तुओं को सॉर्ट करने के लिए एक प्रक्रिया चलाई जाती है। +
को टर्मिनेटर -exec
कारण कई तर्क करने के लिए एक सूची के रूप में प्रदान किया जाने वाला ls
। जब तक आपकी निर्देशिका (फ़ोल्डर) में बहुत बड़ी संख्या में फाइलें नहीं होती हैं, तो आपके पास एक सूची होनी चाहिए (और इस प्रकार एक प्रक्रिया कांटे की), जिसके परिणामस्वरूप आप चाहते हैं।
रिवर्स ऑर्डर में फ़ाइल सूची प्रदर्शन: ls -lSrh
आरोही क्रम के लिए: ls -lSh
मैंने कुछ समय पहले इस हद तक कुछ लिखा था। आप यह निर्दिष्ट करने के लिए एक तर्क पारित कर सकते हैं कि big
आपको 10 में से किस मामले में कितनी फाइलें सूचीबद्ध करनी हैं, या सिर्फ टाइप करना है।
big () {
NUM_FILES=10;
if [ $1 ]; then
NUM_FILES=$1;
fi;
du | sort -nr | head -n $NUM_FILES
}
इन की कोशिश करो, यह मेरे लिए ठीक काम करता है।
$ 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
sed
आउटपुट में कटौती करने के लिए उपयोग करता हूं
डेल्हा के उत्तर और स्टीफन चेज़लस की टिप्पणी को जोड़ना ...
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 भी देखें ।
मूल प्रश्न के रूपांतर के रूप में, यदि आप उपनिर्देशिकाओं में संचयी आकार की फाइलों को देखना चाहते हैं:
#!/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 / debianapt install ncdu
) के साथ-साथ ओएक्सएक्स (brew install ncdu
) पर उपलब्ध है।