Với GNU du
(tức là trên Linux hoặc Cygwin không được nhúng), bạn có thể sử dụng --exclude
tùy chọn để loại trừ các tệp bạn không muốn khớp.
du -s --exclude='*.html' /var/foo
Nếu bạn muốn khớp *.pdf
các tệp một cách tích cực , bạn sẽ cần sử dụng một số phương pháp khác để liệt kê các tệp và du
ít nhất sẽ hiển thị một dòng đầu ra cho mỗi đối số, cộng với tổng cộng với tùy chọn -c
. Bạn có thể gọi tail
để xóa tất cả trừ dòng cuối cùng hoặc sed để xóa từ. Để liệt kê các tệp trong một thư mục đó, hãy sử dụng các ký tự đại diện trong trình bao.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Nếu bạn cũng cần duyệt các tệp trong thư mục con, hãy sử dụng find
hoặc sử dụng một **/
mẫu nếu trình bao của bạn hỗ trợ điều đó. Đối với **/
, trong bash, lần chạy đầu tiên shopt -s extglob
và lưu ý rằng các phiên bản bash lên đến 4.2 sẽ đi qua các liên kết tượng trưng đến các thư mục; trong zsh, điều này làm việc ra khỏi hộp.
du -sc /var/foo/**/*.pdf | tail -n1
Một điều phức tạp nữa với phiên bản find là nếu có quá nhiều tệp, find
sẽ chạy du
nhiều lần, để giữ dưới giới hạn độ dài dòng lệnh. Với phương thức ký tự đại diện, bạn sẽ gặp lỗi nếu điều đó xảy ra (vượt quá giới hạn độ dài dòng lệnh của Mt. Đoạn mã sau giả định rằng bạn không có bất kỳ tên tệp phù hợp nào chứa dòng mới.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
nào?