Yanıtlar:
Bu, aşağıdakilerle yapılabilir find:
find . -type f -size -1M -exec rm {} +
Bunun özyinelemeli olarak alt dizinlere ineceğini ve 1 megabayttan küçük tüm dosyaları koşulsuz olarak sileceğini unutmayın. Dikkatli ol.
find. :)
findaksine, çağrılan süreçle ilgili argüman sayısını sistemin sınırlarına sığacak şekilde kısıtlar rm *. gerekirse findbirden çok örneğini çağırır rm. Ve eminim ki yeni satır karakterleri de dahil olmak üzere özel karakterlere doğru davranılıyor. Tercihim -exec rmüzerinde -deleteesneklik nedenlerle - örnek olarak, ikincisi teklifler hiçbir şekilde silme yazmaya karşı korumalı dosyalara.
-1Mistenildiği gibi bir megabayttan daha az anlamına gelir. Sürümünüz, tam olarak bir megabayt boyutundaki tüm dosyaları siler, bu da anlamsız bir işlem gibi görünüyor.
find . -type f -size +1M -exec rm {} +. -1M yerine + 1M değerine dikkat edin.
Bu işi yapmalıdır:
$ find <directory> -type f -size -1M -delete
-işaretin "1 milyondan az" anlamına gelen eksi işareti olduğuna inanıyorum . Çalıştırırsanız find <directory> -type f -size +1M -delete, 1M'den büyük tüm dosyaları silersiniz .
Sadece çeşitlilik ve olası (muhtemelen marjinal) bir performans kazancı için:
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargsişlem başlatır .
Bu bağlantıyı kontrol edebilirsiniz http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , tam olarak ne istediğinizi var.
for file in *;
do
file_size=$(du $file | awk '{print $1}');
if [ $file_size == 0 ]; then
echo "Deleting empty file $file with file size $file_size!";
echo "rm -f $file";
fi;
done
Bir for döngüsü ile tüm dosyaları yineleyebilir ve yukarıdaki örnekte olduğu gibi dosya boyutunu bulmak için du ve awk kullanabilirsiniz.
1M.