Kích thước tệp với nén zfs


9

Tôi thường ước tính kích thước của toàn bộ cây thư mục bằng cách sử dụng du -ks $DIRECTOY_TREE_ROOT, nhưng phương pháp này không thể được sử dụng khi nén zfs.

Các totalhiển thị bằng ls -llà ok cho một thư mục duy nhất, nhưng đó là cách đơn giản nhất để có được những kết quả tương tự cho một cây thư mục?

BIÊN TẬP:

Hệ điều hành là Solaris 10.

Tôi đang tìm kích thước tập tin thực sự, không phải không gian được sử dụng trên đĩa.


Bạn đang tìm kiếm không gian thực tế được sử dụng trên đĩa, hoặc kích thước tập tin thực sự?
justarobert

Câu trả lời:


5

Điều này chỉ nên làm việc:

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

12

Chỉ cần sử dụng du -b ví dụ:

# du -sh .
215G    .

# du -sbh .
344G    .

Mười hai phiếu bầu mặc dù thực tế không có tùy chọn "-b" với Solaris 10 du...
jlliagre

Trên Solaris 11, nó hoạt động thông quagdu -bsh foldername
Sao chép Run Bắt đầu

3

Có thể lấy cả kích thước tệp và sử dụng đĩa gần đúng direcly từ lệnh 'find' với tham số '-ls'

 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
        }
    '
)

Một số lệnh và đầu ra mẫu:

-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 này sẽ tạo ra kết quả mong muốn:

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

Tôi không có phân vùng ZFS để kiểm tra, nhưng trên phân vùng ext4 của tôi, nó cho kết quả tương tự du -ks.


Câu hỏi đã được chỉnh sửa để hỏi kích thước tệp thực tế, không phải là câu hỏi được sử dụng trên đĩa mà cả hai du và ls đang báo cáo.
jlliagre

2

man du có lẽ sẽ giúp ở đây:

 --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

Đây không phải là tùy chọn như vậy os Solaris 10 du. Nó là một phần mở rộng Gnu không chuẩn.
jlliagre

Có thể là. Solaris Express 11 có nó, mặc dù.
the-wợi

4
Solaris 10 không bó Gnu du. Solaris 11 Express có cả / usr / bin / du không hỗ trợ tùy chọn --apparent-size và / usr / gnu / bin / du hỗ trợ nó.
jlliagre

2

Tôi sẽ bao gồm câu trả lời cho câu hỏi này cho FreeBSD vì sự hoàn chỉnh. Theo man du:

 -A      Display the apparent size instead of the disk usage.  This can be
         helpful when operating on compressed volumes or sparse files.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.