2009-02-13 25 views
7

Boş (sıfır bayt) dosyaları bulmanın ve çıkarmanın sadece Mac OS X'e özgü araçları kullanarak en kolay/en iyi yolu nedir?Boş (sıfır bayt) dosyaları silme

+0

açıklık lütfen! boş olan bir dosya, tüm boş dosyalar? Ne denedin, nerede hatalar? – hop

+0

Cevabımın bir yorumu soruyu açıklığa kavuşturdu; uygun şekilde güncelleniyor. –

+0

Teşekkür ederim Charles Duffy. Kötü İngilizce'm için üzgünüm: p – Bank

cevap

15

Kolay:

find . -type f -size 0 -exec rm -f '{}' + 

(MacOS find uygulanmasını varsayarak) xattr içeriğine sahip herhangi bir dosyayı görmezden için: Birçok xattrs özellikle yararlı unutmayınız söyledi

find . -type f -size 0 '!' -xattr -exec rm -f '{}' + 

(örneğin, tüm indirilen dosyalarda com.apple.quarantine bulunur).

+1

-type f iyi bir çağrı – dwc

+0

bulmak bulmak. -size 0 -exec rm {} \; ama -type f daha iyi olmalı – Bank

+0

Yani, ingilizce, "geçerli dizindeki tüm boş dosyaları bul ve kullanıcıya sormadan onları sil"? – endolith

1
find /path/to/stuff -empty 

o aradığınız dosyaların listesi ise o zaman komutu olun:

find /path/to/stuff -empty -exec rm {} \; 

dikkatli olun! Bunu geri almanın hiçbir yolu olmayacak! Yeterince

+0

+ kullanmaktan iyidir; Mevcut bir bulgun varsa - bu şekilde boru hattında olsaydı xargs'ın nasıl davranacağı gibi davranır. –

1

Kullanımı: Diğer tüm olası varyasyonları ile

find . -type f -size 0b -exec rm {} ';' 

silinir sınırlamak için.

8
Sen tarafından/bin/rm çalıştırmak için çatalların potansiyel çok sayıda düşürebilir

:

find . -type f -size 0 -print0 | xargs -0 /bin/rm -f 

Yukarıdaki komut, çok taşınabilir yerine sadece Linux kutuları daha Unix çoğu sürümlerinde çalışan ve sürümlerinde Unix'in on yıllardır geri dönüyor. Uzun dosya listeleri için, listenin komut satırı uzunluk sınırını aşmasını önlemek için çeşitli /bin/rm komutları çalıştırılabilir.

Benzer bir etki

hala /bin/rm yanında başka eylemler için oldukça rahat bir tarzda xargs en yaygın kullanımını değiştirmek için bir + find kullanarak, daha yeni işletim sistemleri üzerinde daha az yazarak elde edilebilir. Bu durumda, find, gerçekten uzun dosya listelerini ayrı /bin/rm komutlarına ayırmayı işleyecektir. Kabuğun bir şey yapmasını engellemek için {} normal olarak alıntılanmıştır; tırnak her zaman gerekli fakat alıntı kabuğun karışıklıklar burada kapsayacak şekilde çok karıştı, bu nedenle şüphe, kesme eklediğinizde değildir: Linux'ta

find . -type f -size 0 -exec /bin/rm -f '{}' + 

, briefer yaklaşımlar genellikle -delete kullanarak mevcuttur. Son find 'un -delete birincil' in unlink (2) ile doğrudan uygulandığını ve bir zilyon /bin/rm komutunu üretmediğini veya xargs ve + doların bile yapamadığını unutmayın. Mac OS find da -delete ve -empty primerleri vardır.

find . -type f -empty -delete 

boş (ve yeni boşaltılmış) dosyalarını basmayı için - dizinleri de - birçok modern Linux barındıran bu verimli yaklaşımı kullanabilirsiniz:

find . -empty -delete 
+1

+1 Bu daha iyi bir cevap. –

+1

Bu _does_, taşınabilirliği geliştirdi, ancak - bul '-exec ... {} + 'sadece Linux'un ötesindedir. Hemen kapalı olarak, hem Solaris 11 hem de OS X, bu son eki bulmak için POSIX belirtimine destek verir (1003.1'in 6 numaralı satırında eklenmiştir). –

+0

'+' sözdizimi daha az taşınabilir, ancak yine de oldukça taşınabilir. Bu kesinlikle * eski * Unixen'de * xx * 'nin * var olmadığı bir dizi için mevcut değildir. 'xargs' da, daha fazla esnekliğe ihtiyaç duyma sıklığı gerçekten düşük olmasına rağmen, '+' dan çok daha esnektir. Yine de + formunu ekleyeceğim. –

İlgili konular