परिणाम खोजने में "मानव पठनीय" फ़ाइल आकार कैसे प्रदर्शित करें?


11

मैं अपने सेंटोस सर्वर पर सभी बड़ी फ़ाइलों को खोजने की कोशिश कर रहा हूं। यह करने के लिए कि मैं उपयोग कर रहा हूँ:

find / -maxdepth 10 -size +100000 -ls

मैंने बदलने की कोशिश की -ls, -lshलेकिन इसकी अनुमति नहीं है।

मैं इन परिणामों को मानव-पठनीय आकार (प्रत्यय k, M,… का उपयोग करके) कैसे प्रदर्शित कर सकता हूं?


मानव पठनीय के लिए आपकी परिभाषा क्या है? मेरे लिए वह मानव काफी पठनीय है।
manatwork

आप के fileसाथ उपयोगिता की कोशिश करनी चाहिए find
रमेश

@manatwork kb, mb, gb
blarg

जवाबों:


10

findजैसे परिष्कृत विकल्प नहीं है ls। यदि आप चाहते हैं ls -h, तो आपको कॉल करने की आवश्यकता है ls

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

-xdevयदि आप डिस्क स्थान के बारे में चिंतित हैं, तो मैं अन्य फाइल सिस्टम में शामिल होने से बचने के विकल्प की सलाह देता हूं ।

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

यदि आप अपने शेल के रूप में zsh का उपयोग करते हैं find, तो उपयोग करने के बजाय , आप ग्लोब क्वालिफायर का उपयोग कर सकते हैं। फ़ाइल का आकार सीमित करना सरल है: Lआकार के बाद; आकार में संख्या से पहले एक वैकल्पिक इकाई हो सकती है। यदि आप अधिकतम गहराई के बारे में परवाह नहीं करते हैं, तो आप **/उपनिर्देशिकाओं में पुनरावृत्ति करने के लिए उपयोग कर सकते हैं । यदि आप अधिकतम गहराई के बारे में परवाह करते हैं, तो यह अधिक बोझिल है क्योंकि zsh ग्लोब पैटर्न में "अधिकांश एन घटनाओं पर" व्यक्त करने का एक तरीका है । क्रॉस-डिवाइस पुनरावृत्ति से बचने के लिए, dग्लोब क्वालीफायर का उपयोग करें ; आपको डिवाइस नंबर खोजने की आवश्यकता है, जिसे आप statलिनक्स के तहत कमांड के साथ प्रदर्शित कर सकते हैं ( stat -c %d /बस नंबर को प्रदर्शित करने के लिए) या zsh के अपने बिलिन stat( zmodload zsh/statइसे लोड करने के लिए रन ) के साथ।

ls -lh /**/*(L+M99d$(stat -c %d /))

4

आप जो आदेश दे रहे हैं, वह मेरे लिए पठनीय है। हालाँकि, आप फ़ाइल उपयोगिता का उपयोग नीचे दिए गए खोज के साथ कर सकते हैं।

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

ऐसा करने का एक और तरीका नीचे दिए गए आदेश का उपयोग कर रहा है।

du -BM / | sort -nr

उपरोक्त कमांड आपको सॉर्ट की गई फ़ाइल के आकार की फाइलें देगा।

यदि आप coreutils> 7.5 का उपयोग कर रहे हैं , तो आप फ़ाइलों को आकारों द्वारा सूचीबद्ध करने के लिए नीचे आदेश जारी कर सकते हैं।

du -ah / | grep -v "/$" | sort -h

मेरी मशीन में, मेरे पास sort -hविकल्प उपलब्ध नहीं था ।

जैसा कि आपने टिप्पणी में उल्लेख किया था, आपका मानव पठनीय प्रारूप है फ़ाइल का आकार kb , mb या gb में होना चाहिए । मैं दूसरी कमांड के साथ जाऊंगा जिसे मैंने उत्तर के रूप में पोस्ट किया था। जब मैंने इसे अपने सिस्टम में उपयोग किया तो मुझे जो आउटपुट मिला, वह है,

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking

क्या आपके दूसरे कमांड पर कम सीमा निर्धारित करने का कोई तरीका है? सबसे बड़ी फाइलें सबसे ऊपर दिखाई देती हैं और जल्दी से शेल के ऊपर से गायब हो जाती हैं EDIT - मैं देख रहा हूं कि आपको सिर्फ r
blarg

आप > outputकमांड में जोड़कर आउटपुट को किसी फ़ाइल में पुनर्निर्देशित कर सकते हैं । फिर, आप फ़ाइल खोल सकते हैं और अपनी इच्छानुसार आउटपुट देख सकते हैं :)
रमेश

मैं इस फ़ोल्डर को भी प्रदर्शित करता हूं, जबकि मैं केवल फाइलों के बाद हूं
ब्लरग

du -a --max-depth=10 / | sort -rnमैं करीब आ सकता है। हालाँकि, इस स्थिति में, यह KB, MB या GB में आकार प्रदर्शित नहीं करेगा।
रमेश

1

मुझे लगता है कि आप के बाद क्या कर रहे हैं निम्नलिखित की तरह अधिक है।

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

-execआपको एक कमांड निष्पादित करने की अनुमति देता है और खोज {}के परिणाम के साथ प्रतिस्थापित किया जाता है। अंत में +यह बताना है कि यह कमांड का अंत है और इसकी आवश्यकता है।


2
यह वास्तव में {}यहाँ उद्धृत करने के लिए पूरी तरह से अनावश्यक है। कमांड में सिंगल कोट्स शेल के लिए हैं, लेकिन शेल कमांड को कभी भी देखने वाला नहीं है ls -lah <args...>- यह देखता है {}, जिसे उद्धृत करने की आवश्यकता नहीं है। यह है findकि यह देखता है ls -lah {}और यह है findकि फैलता है {}, और जैसा कि -execविकल्प के नाम से निहित है , सीधे तर्कों पर findएक exec*सिस्टम कॉल का उपयोग करता है , इसलिए रिक्त स्थान के साथ कोई समस्या नहीं होगी क्योंकि findशब्द-विभाजन करना नहीं है अपने फ़ाइल नाम पर।
jw013

1
-aकरने के लिए विकल्प lsअनावश्यक के बाद से तर्क फ़ाइलें और नहीं निर्देशिकाओं होने की उम्मीद कर रहे हैं। जीएनयू विकल्प के ls -dilsलिए उपयोग करता है -ls, इसलिए यह दोहराने के लिए कि यह सबसे निकट होगा ls -dilsh
jw013

आदमी खोजने का उपयोग कर का पहला उदाहरण के लिए निम्नलिखित देता -exec : find . -type f -exec file '{}' \; चलाता फ़ाइल में या वर्तमान निर्देशिका नीचे हर फ़ाइल पर। ध्यान दें कि ब्रेस एकल व्याख्या के रूप में खोल स्क्रिप्ट विराम चिह्न से बचाने के लिए उद्धरण चिह्नों में संलग्न हैं। अर्धविराम समान रूप से एक बैकस्लैश के उपयोग द्वारा संरक्षित है, हालांकि उस मामले में भी एकल उद्धरण का उपयोग किया जा सकता था।
टिम ह्यूजेस

1
मैन पेज बस कुछ अनावश्यक सावधानी की वकालत कर रहा है। यह दुख नहीं होगा, लेकिन मुझे किसी भी शेल के बारे में पता नहीं {}है जिसे उद्धृत करने की आवश्यकता है।
jw013
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.