मैं आकार में बड़े से छोटे के क्रम में सभी फाइलों को सूचीबद्ध करना चाहता हूं और फाइलें एक निश्चित फ़ोल्डर में कहीं भी मौजूद हो सकती हैं।
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)एक ग्लोब क्वालीफायर है , केवल नियमित फ़ाइलों .का चयन करने के लिए , लंबाई के अनुसार ऑर्डर करने के लिए (फ़ाइल आकार, आरोही क्रम के लिए, अवरोही के लिए)।OLoO
(ध्यान दें कि 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) पर उपलब्ध है।