ด้วย GNU du
(เช่นบน non-embedded Linux หรือ Cygwin) คุณสามารถใช้--exclude
ตัวเลือกเพื่อแยกไฟล์ที่คุณไม่ต้องการให้ตรงกัน
du -s --exclude='*.html' /var/foo
หากคุณต้องการที่จะบวกตรงกับ*.pdf
ไฟล์ที่คุณจะต้องใช้วิธีการอื่น ๆ บางอย่างที่จะแสดงรายการไฟล์และdu
จะแสดงผลที่น้อยบรรทัดหนึ่ง output -c
ต่ออาร์กิวเมนต์บวกรวมใหญ่มีตัวเลือก คุณสามารถโทรtail
เพื่อลบทั้งหมดยกเว้นบรรทัดสุดท้ายหรือกดเพื่อลบคำว่า "รวม" เช่นกัน เมื่อต้องการระบุไฟล์ในไดเรกทอรีเดียวให้ใช้อักขระตัวแทนในเชลล์
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
หากคุณต้องการสำรวจไฟล์ในไดเรกทอรีย่อยด้วยให้ใช้find
หรือใช้**/
รูปแบบหากเชลล์ของคุณรองรับ สำหรับ**/
ใน bash ให้เรียกใช้ครั้งแรกshopt -s extglob
และโปรดทราบว่า bash เวอร์ชันสูงถึง 4.2 จะทำการเชื่อมโยงสัญลักษณ์ไปยังไดเรกทอรี ใน zsh สิ่งนี้จะทำงานนอกกรอบ
du -sc /var/foo/**/*.pdf | tail -n1
ภาวะแทรกซ้อนที่เพิ่มเข้ามากับรุ่นค้นหาคือหากมีไฟล์มากเกินไปfind
จะทำงานdu
มากกว่าหนึ่งครั้งเพื่อให้อยู่ภายใต้ขีดจำกัดความยาวบรรทัดคำสั่ง ด้วยวิธีไวด์การ์ดคุณจะได้รับข้อผิดพลาดหากเกิดขึ้น (“ เกินขีด จำกัด บรรทัดคำสั่ง”) รหัสต่อไปนี้อนุมานว่าคุณไม่มีชื่อไฟล์ที่ตรงกันที่มีบรรทัดใหม่
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
ไม่ได้เหรอ?