Bagaimana cara saya menghapus semua file yang lebih kecil dari ukuran tertentu di semua subfolder?

88

Saya memiliki folder dengan banyak sub-folder yang berisi file tif kecil (kurang dari 160kb) yang telah digabung bersama dalam file pdf yang lebih besar, bersama dengan beberapa file tif multi-halaman besar.

Saya ingin menghapus semua file tif kecil tanpa menghapus file yang lebih besar (tif atau pdf) dan mempertahankan struktur direktori. Bagaimana saya melakukannya di Linux menggunakan command-line?

Melakukan
sumber

Jawaban:

155
find . -name "*.tif" -type 'f' -size -160k -delete

Jalankan perintah tanpa -deleteterlebih dahulu untuk memverifikasi bahwa file yang benar ditemukan.

Perhatikan -sebelumnya 160k. Hanya 160kberarti persis 160 kilobyte. -160kberarti lebih kecil dari 160 kilobyte. +160kberarti lebih besar dari 160 kilobyte.

Perintah -type 'f'memaksa untuk hanya bertindak pada file dan melewati direktori. ini akan menghindari kesalahan jika path berisi folder dengan nama yang cocok dengan pola *.tif.

Jika Anda ingin menyaring ukuran dalam bytes (seperti dalam 160 byte bukan 160 kilobyte) maka Anda harus menulis seperti ini: 160c. Jika Anda baru saja menulis 160itu akan ditafsirkan sebagai 160 * 512 byte. Ini adalah persyaratan aneh oleh POSIX. Baca di sini untuk rincian lebih lanjut: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes

lesmana
sumber
Halaman manual ubuntu sepertinya menyebutkan ini. Tepat di bawah bagian "UJI": Argumen numerik dapat ditentukan sebagai + n untuk lebih besar dari n, -n untuk kurang dari n, n untuk tepat n.
jdg
1
Terima kasih. tidak terpikir oleh saya bahwa informasi itu mungkin berada di tempat lain di halaman manual.
lesmana
Sangat menyenangkan perintah ini juga bekerja secara rekursif. Kasus penggunaan saya adalah menghapus file .txt di bawah 12kB.
Sun
tidak perlu untuk sudo?
Jean-François Gagnon
11
Untuk ukuran dalam byte, tentukan 50c, bukan 50b atau 50!
Evengard