Jawaban:
Ini dapat dilakukan dengan find:
find . -type f -size -1M -exec rm {} +
Perhatikan bahwa ini akan secara rekursif turun ke subdirektori, dan tanpa syarat akan menghapus semua file yang lebih kecil dari 1 megabyte. Hati-hati.
find. :)
findmembatasi jumlah argumen untuk proses yang dipanggil agar sesuai dengan batas-batas sistem, berbeda dengan rm *, yang dijamin menjadi pemanggilan proses tunggal. findakan memanggil beberapa instance rmjika perlu. Dan saya cukup yakin bahwa karakter khusus diperlakukan dengan benar, termasuk karakter baris baru. Saya lebih suka -exec rmlebih -deletekarena alasan fleksibilitas - sebagai contoh, penawaran terakhir ada cara untuk menghapus write-file yang dilindungi.
-1Mberarti kurang dari satu megabyte yang diinginkan. Versi Anda akan menghapus semua file dengan ukuran tepat satu megabyte, yang tampaknya merupakan operasi yang tidak berguna.
find . -type f -size +1M -exec rm {} +. Perhatikan +1M bukan -1M.
Ini harus melakukan pekerjaan:
$ find <directory> -type f -size -1M -delete
-tandanya adalah tanda minus yang berarti "kurang dari 1 juta". Jika Anda menjalankan, find <directory> -type f -size +1M -deleteAnda akan menghapus semua file yang lebih besar dari 1M.
Hanya untuk variasi dan kemungkinan peningkatan kinerja (mungkin marginal):
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargsproses tambahan .
Anda dapat checkout tautan ini http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , ia memiliki apa yang Anda inginkan.
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
Anda dapat mengulangi semua file dengan for for dan kemudian gunakan du dan awk untuk menemukan ukuran file seperti pada contoh di atas.
1M.