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 --excludetù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 *.pdfcá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 findhoặ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 extglobvà 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, findsẽ chạy dunhiề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/*.pdfnào?