ฉันจะแสดงรายการ (ใช้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
ถ้าไม่ได้เป็นเพียงตัวอย่างและคุณเพียงตั้งใจตรวจสอบภาพคุณสามารถจัดเรียงตามขนาดls
ls -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