2009-07-15 13 views
32

के साथ चुने गए फाइलों के समूह का कुल आकार उदाहरण के लिए, मेरे पास एक बड़ी फाइल सिस्टम है जो अपेक्षा से तेज़ी से भर रहा है। तो मैं क्या जोड़ा जा रहा है के लिए देखो:'ढूंढें'

find /rapidly_shrinking_drive/ -type f -mtime -1 -ls | less 

और मुझे लगता है, ठीक है, सामान के बहुत सारे। छह-सात प्रकार की हजारों फाइलें। मैं एक प्रकार खास तौर और उन्हें भरोसा कर सकते हैं:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 -ls | wc -l 

लेकिन क्या मैं वास्तव में चाहते हैं तो इन फ़ाइलों के डिस्क पर कुल आकार पाने के लिए सक्षम होने के लिए है:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 | howmuchspace 

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

उत्तर

55

कमांड du आपको डिस्क उपयोग के बारे में बताता है। अपने विशिष्ट मामले के लिए उदाहरण उपयोग:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 -print0 | du --files0-from=- -hc | tail -n1 

(पहले मैं du -hs लिखा था, लेकिन मेरी मशीन find के इनपुट उपेक्षा प्रकट होता है और इसके बजाय उस पर CWD के आकार का सारांश है।)

+0

बहुत अच्छा। हालांकि, याद रखना कि क्रूर कीवर्ड 'ढूंढ' ("--files0-from =") वास्तव में 'awk' अनुक्रम को याद करने से आसान नहीं हो सकता है। –

+1

'du' संस्करण 8.13 का उपयोग करके निम्नलिखित मुझे एक ही परिणाम देता है:' du -ch/rapidly_shrinking_drive/* offender1 * | tail -n1' – jason

+2

मेरी मशीन को '--files0-from = 'विकल्प पसंद नहीं है। ; -/ –

11

अरे, Stephan202 है सही। मैं डु -s (संक्षेप में प्रस्तुत) के बारे में नहीं सोचा था, इसलिए बजाय मैं awk प्रयोग किया है:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 | du | awk '{total+=$1} END{print total}' 

मैं दूसरे सवाल का जवाब चाहते बेहतर हालांकि, और यह लगभग निश्चित रूप से और अधिक कुशल है।

+2

खोज में -exec का उपयोग वैकल्पिक: 'तेजी से_shrinking_drive/-name" offender1 "-mtime -1 -exec du {} \; ढूंढें; | awk '{कुल + = $ 1} अंत {प्रिंट कुल}' ' – Sylvain

+1

क्या यह अंतिम आउटपुट संख्या को 103 एम जैसे अधिक मानव पठनीय प्रारूप में परिवर्तित करने में सक्षम है? – Zen

-1

तुम भी आकार निकालने के लिए ls -l इस्तेमाल कर सकते हैं उनके आकार को खोजने के लिए है, तो awk:

find /rapidly_shrinking_drive/ -name "offender1" -mtime -1 | ls -l | awk '{print $5}' | sum 
+0

यह गलत है। ls -l की आवश्यकता नहीं है। – ghostdog74

+0

यदि आप इसे इस तरह से करने जा रहे हैं, तो आपको जीएनयू खोज के स्पष्ट उल्लेख के लिए xargs – spookypeanut

6

जीएनयू साथ मिल जाए,

find /path -name "offender" -printf "%s\n" | awk '{t+=$1}END{print t}' 
+0

+1 का उपयोग करने की आवश्यकता है। (खराब करने के लिए यह उस तरह से कम पोर्टेबल है)। – Hennes

1

मैं यह सब आदेशों लेकिन कोई किस्मत की कोशिश की है। तो मैं इस एक है कि मुझे एक जवाब देता है पाया है:

find . -type f -mtime -30 -exec ls -l {} \; | awk '{ s+=$5 } END { print s }' 
3

मैं जवाब की स्थिति के ऊपर जेसन की टिप्पणी को बढ़ावा देने, क्योंकि मेरा मानना ​​है कि यह सबसे स्मरक (हालांकि सबसे सामान्य नहीं है चाहते हैं, अगर आपको वास्तव में find द्वारा निर्दिष्ट फ़ाइल सूची होना चाहिए):

$ du -hs *.nc 
6.1M foo.nc 
280K foo_region_N2O.nc 
8.0K foo_region_PS.nc 
844K foo_region_xyz.nc 
844K foo_region_z.nc 
37M ETOPO1_Ice_g_gmt4.grd_region_zS.nc 
$ du -ch *.nc | tail -n 1 
45M total 
$ du -cb *.nc | tail -n 1 
47033368 total