วิธีการแสดงเฉพาะขนาดไฟล์ทั้งหมดของส่วนขยายเฉพาะโดยคำสั่ง `du`


11

ฉันมีไฟล์ PDF และไฟล์ html หลายร้อยรายการในไดเรกทอรี และฉันต้องการทราบขนาดไฟล์ PDF ทั้งหมด

โดยคำสั่งdu -ch /var/fooฉันสามารถดูขนาดไฟล์ทั้งหมด แต่ฉันต้องการเพียงบรรทัดสุดท้ายคือขนาดรวม

หากไดเรกทอรีมีเฉพาะไฟล์ PDF ฉันสามารถใช้-sตัวเลือกได้ แต่ตัวเลือกนี้ไม่สามารถใช้ได้ในเวลานี้

ฉันจะได้รับขนาดไฟล์เฉพาะบางประเภทได้อย่างไร


คุณใช้du -sh /foo/*.pdfไม่ได้เหรอ?
bagavadhar

2
du -ch /var/foo/*.pdf | tail -n 1
don_crissti

คำตอบ:


10

ด้วย 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}'

(อาจไม่ใช่ปัญหาในทางปฏิบัติ แต่โปรดทราบว่า--exclude='*.html'จะ/var/foo/dir.html/foo.pdfไม่นับเป็นข้อยกเว้นเช่นกันที่ส่งผลกระทบต่อการส่งผ่านไดเรกทอรีนอกจากนี้การใช้งานดิสก์ของไดเรกทอรีรวมถึง/var/fooตัวเองจะได้รับการพิจารณา)
Stéphane Chazelas

3

คุณสามารถปล่อยให้เชลล์ขยายไฟล์:

$ mkdir foo
$ echo "abc" > foo/1.pdf
$ echo "abcd" > foo/2.pdf
$ echo "abcd" > foo/3.html
$ du -ch foo/*.pdf
4,0K    foo/1.pdf
4,0K    foo/2.pdf
8,0K    total

อย่างไรก็ตามในขณะที่คุณสามารถดูขนาดไฟล์นี้ประมาณ 1000 เท่าที่เพิ่งสร้าง ตัวเลือกที่ดีกว่าคือการใช้-bตัวเลือก:

$ du -cbh foo/*.pdf
4   foo/1.pdf
5   foo/2.pdf
9   total

filesizes 173Kขนาดใหญ่จะยังคงปรากฏในคนอ่านรูปแบบเช่น


duแสดงการใช้งานดิสก์ของแต่ละไฟล์ (ในระบบไฟล์ส่วนใหญ่นั่นคือขนาดไฟล์ที่ปัดเศษขึ้นเป็นหลาย ๆ ขนาดบล็อกถัดไป) มีตัวเลือก-b, duแสดงขนาดของแต่ละไฟล์
Gilles 'หยุดชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.