ฉันจะแสดงรายการ (ใช้ls) ไฟล์ทั้งหมดที่ไม่ว่างเปล่า (ขนาด> 0) โดยใช้ linux ได้อย่างไร?
ฉันจะแสดงรายการ (ใช้ls) ไฟล์ทั้งหมดที่ไม่ว่างเปล่า (ขนาด> 0) โดยใช้ linux ได้อย่างไร?
คำตอบ:
ฉันจะใช้find dirname -not -empty -lsโดยสมมติว่า GNU พบ
lsและคุณใช้find;) ฉัน
นี่คืองานหา ls ไม่ทรงพลังเพียงพอ
find -maxdepth 1 -size +0 -print
-maxdepth 1 - สิ่งนี้บอกให้ค้นหาการค้นหา dir ปัจจุบันเท่านั้นเอาออกเพื่อดูใน dirs ย่อยทั้งหมดหรือเปลี่ยนหมายเลขเพื่อลง 2, 3 หรือมากกว่าระดับ
-size +0สิ่งนี้บอกให้ค้นหาไฟล์ที่มีขนาดใหญ่กว่า0ไบต์ 0สามารถเปลี่ยนเป็นขนาดใดก็ได้ที่คุณต้องการ
-print บอก find เพื่อพิมพ์พา ธ แบบเต็มไปยังไฟล์ที่พบ
แก้ไข: การ
เพิ่มล่าช้า: คุณควรเพิ่ม-type fสวิตช์ด้านบนด้วย ส่วนนี้บอกให้ find เพื่อค้นหาไฟล์เท่านั้น และตามที่ระบุไว้ในความคิดเห็นด้านล่าง-printสวิตช์ไม่จำเป็นจริงๆ
-maxdepth 1 -size +0นอกจากนี้-printคือการกระทำเริ่มต้นดังนั้นจึงไม่จำเป็นต้องใช้
findแตกต่างกันมากในแง่ของตัวเลือกที่ถูกต้องคืออะไรและไปที่ไหน GNU find(ซึ่งเป็นเรื่องธรรมดามาก ๆ ) จะผลิตเตือนถ้าคุณใส่ก่อน-size -maxdepth
find dirname -type f ! -empty
ls -l | awk '{if ($5 != 0) print $9}'
หากคุณมีความตั้งใจในการใช้lsที่คุณต้องการความช่วยเหลือเล็ก ๆ น้อย ๆ awkจาก
Ls แทบไม่มีตัวเลือกในการกรองไฟล์: นั่นไม่ใช่งานของมัน การกรองไฟล์เป็นงานของเชลล์สำหรับกรณีง่าย ๆ (ผ่านการวนรอบ) และงานการค้นหาสำหรับเคสที่ซับซ้อน
ใน zsh คุณสามารถตัวระบุแบบLวงกลมเพื่อเก็บเฉพาะไฟล์ที่มีขนาดคือ> 0 (ตัวระบุ.จะ จำกัด เฉพาะไฟล์ทั่วไป):
ls *(.L+0)
ผู้ใช้เชลล์อื่น ๆ ต้องใช้การค้นหา ด้วย GNU find (ตามที่พบส่วนใหญ่บน Linux):
find -maxdepth 1 -type f ! -empty -exec ls {} +
วิธีที่เป็นไปตาม POSIX คือ:
find . -type f -size +0c -exec ls {} + -o -name . -o -prune
ถ้าไม่ได้เป็นเพียงตัวอย่างและคุณเพียงตั้งใจตรวจสอบภาพคุณสามารถจัดเรียงตามขนาดlsls -S
$ find /* -type f ! -size 0
จะทำงานได้ดีขึ้นหากคุณต้องการไฟล์ที่ไม่ว่างเปล่าทั้งหมดแทนที่จะเป็นเพียงไดเรกทอรี
Bash 4.0+
shopt -s globstar
shopt -s nullglob
for file in **/*; do test -f "$file" && [[ -s "$file" ]] && echo "$file"; done