Hapus semua kecuali 1000 file acak dalam direktori
Kode:
find /path/to/dir -type f -print0 | sort -zR | tail -zn +1001 | xargs -0 rm
Penjelasan:
- Daftar semua file di
/path/to/dirdenganfind;print0:gunakan\0(karakter nol ) sebagai pembatas garis; jadi jalur file yang berisi spasi/baris baru tidak merusak skrip
- Acak daftar file dengan
sort;-z:gunakan\0(karakter null) sebagai pembatas, bukan\n(baris baru)-R:urutan acak
- Kupas 1000 baris pertama dari daftar acak dengan
tail;-z:perlakukan daftar sebagai tanpa batas (sama seperti dengansort)-n +1001:tampilkan baris mulai dari 1001 (mis. hilangkan 1000 baris pertama)
xargs -0 rm- hapus file yang tersisa;-0:dibatasi nol, sekali lagi
Mengapa ini lebih baik daripada solusi quixotic*:
- Berfungsi dengan nama file yang berisi spasi/baris baru.
- Tidak mencoba membuat direktori apa pun (yang mungkin sudah ada, btw.)
- Tidak memindahkan file apa pun, bahkan tidak menyentuh 1000 "file keberuntungan" selain mencantumkannya dengan
find. - Menghindari kehilangan file jika output dari
findtidak diakhiri dengan\n(baris baru) untuk beberapa alasan.
* - kredit ke quixotic untuk | sort -R | head -1000 , memberi saya titik awal.