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/dir
denganfind
;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
find
tidak diakhiri dengan\n
(baris baru) untuk beberapa alasan.
* - kredit ke quixotic untuk | sort -R | head -1000
, memberi saya titik awal.