Boş görünen ancak olmayan dosyalar da dahil olmak üzere belirli bir dizindeki tüm boş dosya ve klasörleri nasıl bulabilirim?


18

Diyelim ki klasörümde ~/listher birinin kendi alt klasörü ve alt alt klasörü vb. Olan çok sayıda klasör var ve neredeyse her düzeyde çok sayıda dosya var. Ancak bu dosya ve klasörlerin bazıları boş, bu yüzden boş dosyaları ve klasörleri bulmak için hepsini tekrar tekrar nasıl arayabilirim? Ve sonra bunların her birinin nerede olduğunu bilmem için bir dosya konumları listesinde görüntülenmesini sağlayın (tüm dosyaların dosya uzantılarına sahip olmadığı için hangi dosyanın ve hangi klasör olduğu da açık olmalıdır). GNOME 3.18 ile Ubuntu GNOME 15.10 kullanıyorum.

Ayrıca, bir dosyanın boş görünüp görünmediğini de söylememesinin çok yararlı olacağını lütfen unutmayın (örneğin içinde boşluklar veya satır boşlukları veya başka bir şey varsa). Ve gerçek bir boş dosya ile çıktıda boş görünen bir dosya arasında ayrım yapar .


1
Boş bir dosya, karakter içermeyen bir dosya mı? (boşluk, çizgi ve sekme olabilir)?
Jacob Vlijm

@JacobVlijm: Daha önce sadece 0 bayt olan dosyaları düşünüyordum, ama şimdi söylediğinize göre, biri bana boşluk veya çizgi veya benzeri bir dosya verecek kadar çılgın olabilirdi, bu yüzden bunları da tespit etmek istiyorum, ancak çıktının gerçek bir boş dosya ile boş görünen bir dosya arasında ayrım yapmasını istiyorum.

Yanıtlar:


25

itibaren man find

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

Bu nedenle, hem boş dosyaları hem de dizinleri bulmak yeterlidir.

find ~/lists -empty

Türü belirtmek için %yçıktı biçimi belirleyicisini kullanabilirsiniz

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

Örneğin

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

veya lsbir --classifyseçenek içeren harici bir programdan yararlanın

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

yani

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

'Boş' tanımınız yalnızca boşluk karakterleri içeren dosyaları içerecek şekilde genişletilirse, artık en azından boş olmayan dosyaları açmanız ve içeriklerini incelemeniz gerektiğinden, daha karmaşık ve daha hesaplama açısından yoğun hale gelir. Başımın üstünden düşünebildiğim en etkili yol,

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

(boş, VEYA bir dosya VE grep en az bir boş olmayan karakter algılamaz). Muhtemelen daha iyi bir yol var.


Maalesef bir şeyi kaçırdım, lütfen sorumun düzenlenmiş sürümüne bakın. Eklemek için çok fazla olmamalıdır.

11

Gönderen ~/listklasörde:

find . -empty -type d

boş dizinleri listelemek ve

find . -empty -type f

boş dosyaları listelemek için.

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

boşluklar ve boş satırlar dahil olmak üzere boş klasörleri ve dosyaları listelemek için


Bu, alt klasörleri ve içeriklerini de tekrar tekrar listeleyecek mi?

bu, boş dosyaları ve klasörleri özyinelemeli olarak gösterir
EdiD

Maalesef bir şeyi kaçırdım, lütfen sorumun düzenlenmiş sürümüne bakın. Eklemek için çok fazla olmamalıdır.

[ `grep -c [[:alnum:]] "{}"` -eq 0 ]yalnızca [A-Za-z0-9]kümede olmayan karakterler içeren dosyalara izin verir .
kos

@kos - muhtemelen grafik yerine alnum işi yapacak
EdiD
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.