ใช้ gnu find ฉันคิดว่านี่คือสิ่งที่คุณต้องการ พบไฟล์จริงทั้งหมดไม่ใช่ไดเร็กทอรี (-type f) และสำหรับแต่ละไฟล์จะพิมพ์ชื่อไฟล์ (% p) แท็บ (\ t) ขนาดเป็นกิโลไบต์ (% k) คำต่อท้าย "KB" และจากนั้น ขึ้นบรรทัดใหม่ (\ n)
find . -type f -printf '%p\t%k KB\n'
หากคำสั่ง printf ไม่ได้จัดรูปแบบตามที่คุณต้องการคุณสามารถใช้ exec ตามด้วยคำสั่งที่คุณต้องการเรียกใช้ในแต่ละไฟล์ ใช้ {} สำหรับชื่อไฟล์และยุติคำสั่งด้วยอัฒภาค (;) ในเชลล์ส่วนใหญ่อักขระทั้งสามตัวควรจะถูกหลีกเลี่ยงด้วยแบ็กสแลช
นี่เป็นวิธีง่ายๆที่ค้นหาและพิมพ์ออกมาโดยใช้ "ls -lh" ซึ่งจะแสดงขนาดในรูปแบบที่มนุษย์อ่านได้ (k สำหรับกิโลไบต์, M สำหรับเมกะไบต์):
find . -type f -exec ls -lh \{\} \;
อีกทางเลือกหนึ่งคือ "wc -c" จะพิมพ์จำนวนอักขระ (ไบต์) ในไฟล์:
find . -type f -exec wc -c \{\} \;
find . -name '*.ear' -exec ls -lh {} + \;
(นามสกุล GNU) หรือfind . -name '*.ear' -print0 | xargs -0 ls -lh
. นอกจากนี้คุณอาจต้องการเพิ่ม-type f
หากคุณสนใจเฉพาะไฟล์ (หรือเพิ่ม-d
ใน ls หากคุณต้องการให้รวมไดเรกทอรีโดยไม่มีเนื้อหา)