วิธีค้นหาไฟล์และโฟลเดอร์เปล่าทั้งหมดในไดเรกทอรีเฉพาะรวมถึงไฟล์ที่ดูว่าง แต่ไม่ได้


18

สมมติว่าในโฟลเดอร์ของ~/listฉันฉันมีโฟลเดอร์จำนวนมากโดยแต่ละโฟลเดอร์ย่อยมีโฟลเดอร์ย่อยและโฟลเดอร์ย่อยย่อยของตนเอง ฯลฯ และมีไฟล์จำนวนมากในแต่ละระดับ อย่างไรก็ตามไฟล์และโฟลเดอร์เหล่านี้บางไฟล์ว่างเปล่าดังนั้นฉันจะค้นหาไฟล์เหล่านั้นซ้ำ ๆ เพื่อค้นหาไฟล์และโฟลเดอร์เปล่าได้อย่างไร จากนั้นให้พวกมันปรากฏในรายการตำแหน่งไฟล์เพื่อที่ฉันจะได้รู้ว่าแต่ละอันอยู่ที่ไหน (มันควรจะชัดเจนว่าเป็นไฟล์อะไรและเป็นโฟลเดอร์ไหนเพราะไฟล์บางไฟล์ไม่มีนามสกุลไฟล์) ฉันใช้ Ubuntu GNOME 15.10 กับ GNOME 3.18

โปรดทราบว่ามันจะมีประโยชน์มากถ้ามันจะบอกฉันด้วยว่าไฟล์ดูว่างเปล่า แต่ไม่ (ตัวอย่างเช่นถ้ามันมีช่องว่างหรือ linebreaks ในไฟล์หรือบางสิ่ง) และจะแยกความแตกต่างระหว่างไฟล์ว่างเปล่าจริงกับไฟล์ที่ดูว่างในเอาต์พุต


1
ไฟล์ว่างเปล่าเป็นไฟล์ที่ไม่มีตัวอักษรหรือไม่? (อาจเป็นช่องว่างการกระจายบรรทัดและแท็บ)
Jacob Vlijm

@JacobVlijm: ก่อนหน้านี้ฉันคิดว่าแค่ไฟล์ที่มีขนาด 0 ไบต์ แต่ตอนนี้เมื่อคุณพูดถึงบางคนอาจจะบ้าพอที่จะให้ไฟล์ที่มีช่องว่างหรือ linebreaks หรืออะไรบางอย่างดังนั้นฉันก็อยากจะตรวจจับเหล่านั้นด้วย แต่ฉันต้องการให้เอาต์พุตแยกความแตกต่างระหว่างไฟล์เปล่าที่แท้จริงและอันที่ดูเหมือนว่างเปล่า

คำตอบ:


25

จาก man find

    -empty File is empty and is either a regular file or a directory.

ดังนั้นเมื่อต้องการค้นหาทั้งไฟล์และไดเรกทอรีที่ว่างเปล่าก็เพียงพอที่จะทำ

find ~/lists -empty

เพื่อระบุประเภทคุณสามารถใช้ตัว%yระบุรูปแบบผลลัพธ์

          %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

เช่น

find ~/lists -empty -printf '%y %p\n'

หรือใช้ประโยชน์จากโปรแกรมภายนอกเช่นlsซึ่งรวมถึง--classifyตัวเลือก

    -F, --classify
          append indicator (one of */=>@|) to entries

กล่าวคือ

find ~/lists -empty -exec ls -Fd {} \;

หากคำจำกัดความของคุณของ 'ว่าง' ถูกขยายเพื่อรวมไฟล์ที่มีอักขระช่องว่างเท่านั้นมันจะซับซ้อนมากขึ้นและเข้มข้นขึ้นเนื่องจากตอนนี้คุณต้องเปิดไฟล์ที่ไม่ว่างอย่างน้อยและตรวจสอบเนื้อหาของไฟล์เหล่านั้น วิธีที่มีประสิทธิภาพที่สุดที่ฉันสามารถคิดได้จากส่วนบนของหัวของฉันจะเป็นอย่างไร

find ~/list \( -empty -o \( -type f -a ! -exec grep -qm1 '[^[:blank:]]' {} \; \) \) -exec ls -Fd {} \;

(ว่างเปล่าหรือไฟล์และ grep ไม่ตรวจจับอย่างน้อยหนึ่งอักขระที่ไม่ใช่ช่องว่าง) มีแนวโน้มว่าจะมีวิธีที่ดีกว่า


ขออภัยฉันพลาดบางอย่างโปรดดูคำถามที่แก้ไขแล้วของฉัน ไม่ควรเพิ่มมากเกินไป

11

จาก~/listโฟลเดอร์:

find . -empty -type d

สำหรับรายการไดเรกทอรีว่างและ

find . -empty -type f

สำหรับการแสดงรายการไฟล์เปล่า

find . -type f -exec bash -c 'if [ `cat "{}" |wc -w` -eq 0 ]; then echo "file - {}";fi' \; -or -empty -exec bash -c "echo dir - {}" \; 

สำหรับการแสดงรายการโฟลเดอร์และไฟล์ว่างรวมถึงช่องว่างและบรรทัดว่าง


และนี่จะแสดงรายการโฟลเดอร์ย่อยและเนื้อหาของมันซ้ำด้วยหรือไม่

การทำเช่นนี้จะแสดงไฟล์และโฟลเดอร์ว่างซ้ำซ้ำ ๆ
EdiD

ขออภัยฉันพลาดบางอย่างโปรดดูคำถามที่แก้ไขแล้วของฉัน ไม่ควรเพิ่มมากเกินไป

[ `grep -c [[:alnum:]] "{}"` -eq 0 ]จะปล่อยผ่านไฟล์ที่มีตัวอักษรไม่ได้อยู่ใน[A-Za-z0-9]ชุด
kos

@kos - อาจกราฟแทน alnum จะทำงาน
EdiD
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.