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
. :)
find
membatasi jumlah argumen untuk proses yang dipanggil agar sesuai dengan batas-batas sistem, berbeda dengan rm *
, yang dijamin menjadi pemanggilan proses tunggal. find
akan memanggil beberapa instance rm
jika perlu. Dan saya cukup yakin bahwa karakter khusus diperlakukan dengan benar, termasuk karakter baris baru. Saya lebih suka -exec rm
lebih -delete
karena alasan fleksibilitas - sebagai contoh, penawaran terakhir ada cara untuk menghapus write-file yang dilindungi.
-1M
berarti 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 -delete
Anda 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
xargs
proses 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
.