Bagaimana menemukan semua file dan folder kosong di direktori tertentu termasuk file yang hanya terlihat kosong tetapi tidak?

18

Katakanlah dalam folder saya, ~/listsaya memiliki sejumlah besar folder masing-masing dengan sub-folder dan sub-folder mereka sendiri dll, dan ada banyak file hampir di setiap level. Namun beberapa file dan folder ini kosong, jadi bagaimana saya bisa mencari semuanya secara rekursif untuk menemukan file dan folder yang kosong? Dan kemudian mereka ditampilkan dalam daftar lokasi file sehingga saya tahu di mana masing-masing (juga harus jelas yang merupakan file dan yang merupakan folder karena tidak semua file memiliki ekstensi file). Saya menjalankan Ubuntu GNOME 15.10 dengan GNOME 3.18.

Harap perhatikan bahwa itu juga akan sangat berguna jika itu juga akan memberi tahu saya jika suatu file tampak kosong tetapi tidak (misalnya jika ada spasi atau garis pemisah di dalamnya atau sesuatu). Dan akan membedakan antara file kosong nyata dan yang hanya terlihat kosong dalam output.


sumber
1
File kosong, apakah file tanpa karakter? (bisa berupa spasi, linebreak, dan tab)?
Jacob Vlijm
@JacobVlijm: Ya, sebelumnya saya hanya berpikir file yang 0 byte, tapi sekarang Anda menyebutkannya, seseorang mungkin sudah cukup gila untuk memberi saya file dengan spasi atau linebreak atau sesuatu, jadi saya ingin mendeteksi itu juga, tapi saya ingin agar keluaran membedakan antara file kosong yang sebenarnya, dan yang terlihat kosong.

Jawaban:

25

Dari man find

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

Jadi untuk menemukan file dan direktori kosong itu sudah cukup untuk dilakukan

find ~/lists -empty

Untuk menunjukkan jenisnya, Anda bisa menggunakan %yspecifier format output

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

misalnya

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

atau memanfaatkan program eksternal seperti ls, yang mencakup --classifyopsi

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

yaitu

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

Jika definisi 'kosong' Anda diperluas untuk menyertakan file yang hanya berisi karakter spasi putih, maka itu menjadi lebih rumit - dan semakin intensif secara komputasi, karena sekarang Anda harus benar-benar membuka setidaknya file yang tidak kosong dan memeriksa isinya. Cara paling efisien yang bisa saya pikirkan dari atas kepala saya akan menjadi sesuatu seperti

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

(baik kosong, ATAU file DAN grep tidak mendeteksi setidaknya satu karakter yang tidak kosong). Kemungkinan ada cara yang lebih baik.

Steeldriver
sumber
Maaf, saya melewatkan sesuatu, silakan lihat versi edit pertanyaan saya. Seharusnya tidak terlalu banyak untuk ditambahkan.
11

Dari ~/listfolder:

find . -empty -type d

untuk daftar direktori kosong dan

find . -empty -type f

untuk daftar file kosong.

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

untuk daftar folder dan file kosong termasuk spasi putih dan baris kosong

Edid
sumber
Dan akankah ini secara sub-daftar sub-folder dan isinya juga?
ini akan menunjukkan file dan folder kosong secara rekursif
EdiD
Maaf, saya melewatkan sesuatu, silakan lihat versi edit pertanyaan saya. Seharusnya tidak terlalu banyak untuk ditambahkan.
[ `grep -c [[:alnum:]] "{}"` -eq 0 ]akan membiarkan melalui file yang hanya berisi karakter tidak di [A-Za-z0-9]set.
kos
@kos - mungkin grafik sebagai gantinya alnum akan melakukan pekerjaan
EdiD