GNU/Linux >> Belajar Linux >  >> Linux

Hapus semua kecuali 1000 file acak dalam direktori

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:

  1. Daftar semua file di /path/to/dir dengan find;
    • print0 :gunakan \0 (karakter nol ) sebagai pembatas garis; jadi jalur file yang berisi spasi/baris baru tidak merusak skrip
  2. Acak daftar file dengan sort;
    • -z :gunakan \0 (karakter null) sebagai pembatas, bukan \n (baris baru)
    • -R :urutan acak
  3. Kupas 1000 baris pertama dari daftar acak dengan tail;
    • -z :perlakukan daftar sebagai tanpa batas (sama seperti dengan sort )
    • -n +1001 :tampilkan baris mulai dari 1001 (mis. hilangkan 1000 baris pertama)
  4. xargs -0 rm - hapus file yang tersisa;
    • -0 :dibatasi nol, sekali lagi

Mengapa ini lebih baik daripada solusi quixotic*:

  1. Berfungsi dengan nama file yang berisi spasi/baris baru.
  2. Tidak mencoba membuat direktori apa pun (yang mungkin sudah ada, btw.)
  3. Tidak memindahkan file apa pun, bahkan tidak menyentuh 1000 "file keberuntungan" selain mencantumkannya dengan find .
  4. 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.


Linux
  1. Hapus Semua File Dalam Direktori Yang Namanya Tidak Cocok Dengan Baris Dalam Daftar File?

  2. Gunakan Temukan Untuk Menemukan Direktori Tertentu Dan Hapus Semua File Di dalamnya Kecuali Satu Direktori?

  3. Bagaimana mengubah semua kemunculan kata di semua file dalam direktori

  1. perintah linux untuk mengosongkan semua file direktori

  2. Temukan semua file nol-byte di direktori dan subdirektori

  3. Hapus semua file kecuali 3 terbaru dalam skrip bash

  1. Bagaimana cara memindahkan semua file dari direktori saat ini ke direktori atas?

  2. Hapus file yang cocok di semua subdirektori

  3. Bagaimana cara menghapus semua file dalam direktori kecuali beberapa?