2010-09-22 9 views
5

मैं विभिन्न फाइल-सिस्टम पर दो निर्देशिकाओं dir1 और dir2 के कुल आकार की तुलना करना चाहता हूं ताकि diff -r dir1 dir20 लौटाए तो कुल आकार बराबर होंगे। du कमांड डिस्क उपयोग देता है, और इसका विकल्प --apparent-size समस्या का समाधान नहीं करता है। अब मैंदो निर्देशिकाओं के आकार की तुलना कैसे करें?

find dir1 ! -type d |xargs wc -c |tail -1 

जैसे डीआईआर 1 के आकार के अनुमान को जानने के लिए कुछ उपयोग करता हूं। क्या कोई बेहतर समाधान है?

संपादित करें:

du -s dir1 --> 540 
du -s dir2 --> 166 

du -sb dir1 --> 250815 (the -b option is equivalent to --apparent-size -B1) 
du -sb dir2 --> 71495 

find dir1 ! -type d |xargs wc -c --> 62399 
find dir2 ! -type d |xargs wc -c --> 62399 
+1

निर्देशिका का आकार जानने के लिए आप 'du -s' का उपयोग क्यों नहीं करते? – Wok

+2

परिभाषित करें कि "दो निर्देशिकाओं के आकार" से आपका क्या मतलब है। – joschi

+1

@wok: यह अलग-अलग फ़ाइल-sytems पर दो निर्देशिकाओं के लिए विभिन्न आकारों की रिपोर्ट कर सकता है भले ही निर्देशिका 'diff' के बराबर की तुलना करें। – rafak

उत्तर

4

find के अपने संस्करण -printf है, तो आप इस काफ़ी तेजी से होने के लिए मिल सकता है: उदाहरण के लिए, मैं (: वे बराबर हैं diff -r dir1 dir2 रिटर्न 0) की है।

find dir1 ! -type d -printf "%s\n" | awk '{sum += $1} END{print sum}' 

एडब्ल्यूके में बड़ी संख्या में उत्पादन के लिए वैज्ञानिक नोटेशन से बचने के कम से कम दो तरीके हैं।

END {OFMT = "%.0f"; print sum} 

END {printf "%.0f\n", sum} 

.0 दशमलव स्थानों के बाद से हम वास्तव में एक पूर्णांक के साथ काम कर रहे हैं और gawk के %d गलत तरीके से संस्करण 3.1.5 में %g (लेकिन 3.1.6 और बाद में) की तरह काम करने लगता है ट्रंकेटस।

हालांकि, gawk प्रलेखन से:

नोट: मान कि व्यापक सी पूर्णांक प्रकार की श्रेणी से बाहर कर रहे हैं, के लिए पूर्णांक प्रारूप नियंत्रण पत्र का उपयोग करते समय 'gawk' लिए स्विच ' % जी 'प्रारूप विनिर्देशक।

एडब्ल्यूके के आपके सिस्टम/संस्करण के लिए अधिकतम पूर्णांक से अधिक होने से सावधान रहें।

+0

मैंने कोशिश की और एक अपमानजनक परिणाम मिला: 2.11437e + 11। Awk में एक printf फ़ंक्शन है इसलिए मैंने कोशिश की: 'dir1 ढूंढें! -प्रकार डी -प्रिंटफ "% s \ n" | awk '{sum + = $ 1} अंत {printf "% f \ n", sum}' 'और मुझे लगता है कि यह एक सटीक परिणाम मिला: 211436502457.000000। अपना जवाब संपादित करें और मैं निश्चित रूप से +1 कर दूंगा! –

+0

@ जेएमसीएफ: आप किस एडब्ल्यूके का उपयोग कर रहे हैं? मैंने थोड़ा और जानकारी जोड़ने के लिए अपना जवाब संपादित किया। –

+0

यह नकली 1.3.3 है जो उबंटू 12.04 के साथ आता है। यह 64-बिट संस्करण है इसलिए इन संख्याओं को सीमा के भीतर अच्छी तरह से होना चाहिए। फिर भी, एक बहुत गहन जवाब, धन्यवाद। –

6

मुझे नहीं पता कि आप स्पष्ट रूप से क्या चाहते हैं। शायद आप यह चाहते हैं?
diff <(du -sh dir1) <(du -sh dir2)

+1

शायद नहीं, लेकिन यह वही था जो मैं खोज रहा था। –

संबंधित मुद्दे