फ़ाइल आकार zfs संपीड़न के साथ


9

मैं आमतौर पर पूरी निर्देशिका ट्री के आकार का उपयोग करके अनुमान लगाता हूं du -ks $DIRECTOY_TREE_ROOT, लेकिन इस विधि का उपयोग तब नहीं किया जा सकता है जब zfs संपीड़न चालू हो।

totalद्वारा प्रदर्शित ls -lएक भी निर्देशिका के लिए ठीक है, लेकिन जो सबसे आसान तरीका है एक निर्देशिका वृक्ष के लिए एक ही परिणाम प्राप्त करने के लिए है?

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

ऑपरेटिंग सिस्टम Solaris 10 है।

मैं वास्तविक फ़ाइल आकार की तलाश कर रहा हूं, न कि डिस्क पर उपयोग की जाने वाली जगह।


क्या आप डिस्क, या वास्तविक फ़ाइल आकार पर उपयोग किए जाने वाले वास्तविक स्थान की तलाश कर रहे हैं?
justarobert

जवाबों:


5

यह सिर्फ काम करना चाहिए:

find . -type f -exec ls -l {} + | nawk '{s=s+$5}
END {print s}'

12

बस du -b उदाहरण का उपयोग करें :

# du -sh .
215G    .

# du -sbh .
344G    .

तथ्य के बावजूद बारह अप वोट सोलारिस 10 के साथ कोई "-बी" विकल्प नहीं है du...
jlliagre

सोलारिस 11 पर, यह काम करता हैgdu -bsh foldername
कॉपी रन स्टार्ट अप

3

यह संभव है कि फ़ाइल का आकार और अनुमानित डिस्क का उपयोग दोनों 'कमांड' के साथ 'डिस्क' से 'direcly' पैरामीटर के साथ हो।

 function lsdu() (
    export SEARCH_PATH=$*
    if [ ! -e "$SEARCH_PATH" ]; then
        echo "ERROR: Invalid file or directory ($SEARCH_PATH)"
        return 1
    fi
    find "$SEARCH_PATH" -ls | gawk --lint --posix '
        BEGIN {
            split("B KB MB GB TB PB",type)
            ls=hls=du=hdu=0;
            out_fmt="Path: %s \n  Total Size: %.2f %s \n  Disk Usage: %.2f %s \n  Compress Ratio: %.4f \n"
        }
        NF >= 7 {
            ls += $7
            du += $2
        }
        END {
            du *= 1024
            for(i=5; hls<1; i--) hls = ls / (2^(10*i))
            for(j=5; hdu<1; j--) hdu = du / (2^(10*j))
            printf out_fmt, ENVIRON["SEARCH_PATH"], hls, type[i+2], hdu, type[j+2], ls/du
        }
    '
)

कुछ नमूना कमांड और आउटपुट:

-bash-3.00# lsdu test_sloccount/
Path: test_sloccount/ 
  Total Size: 30.90 MB 
  Disk Usage: 1.43 MB 
  Compress Ratio: 21.6250 

2

इस oneliner वांछित परिणाम का उत्पादन करना चाहिए:

find $DIRECTOY_TREE_ROOT -type d -exec ls -l '{}' \; | awk '/^total\ .[0-9]+$/ { sum+=$(NF) }END{ print sum }'

मेरे पास इसका परीक्षण करने के लिए ZFS विभाजन नहीं है, लेकिन मेरे ext4 विभाजन पर यह उसी तरह परिणाम देता है du -ks


प्रश्न को वास्तविक फ़ाइलों के आकार के लिए पूछने के लिए संपादित किया गया है, न कि डिस्क पर उपयोग किया गया है जो दोनों du और ls कुल रिपोर्ट कर रहे हैं।
12 अगस्त को jlliagre

2

मैन डू शायद यहाँ मदद करेगा:

 --apparent-size
      print apparent sizes, rather than disk usage;  although
      the  apparent size is usually smaller, it may be larger
      due to holes in (`sparse') files,  internal  fragmenta-
      tion, indirect blocks, and the like

ये ऐसा कोई विकल्प नहीं है OS Solaris 10 du। यह एक गैर मानक Gnu एक्सटेंशन है।
jlliagre

हो सकता है। सोलारिस एक्सप्रेस 11 में यह है, हालांकि।
वाबेट

4
सोलारिस 10 गुन डु को बंडल नहीं करता है। सोलारिस 11 एक्सप्रेस में दोनों / usr / bin / du है जो समर्थन का समर्थन नहीं करता है - और इसका समर्थन करने वाले / usr / gnu / bin / du।
jlliagre

2

मैं पूर्णता के लिए FreeBSD के लिए इस प्रश्न का उत्तर शामिल करने जा रहा हूं। के अनुसार man du:

 -A      Display the apparent size instead of the disk usage.  This can be
         helpful when operating on compressed volumes or sparse files.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.