Saya membiarkan skrip pembuatan data berjalan terlalu lama sekarang memiliki 200.000 file yang saya butuhkan dikurangi menjadi sekitar 1000. Dari baris perintah Linux, apakah ada cara mudah untuk menghapus semua kecuali 1000 file ini, di mana file yang akan dipertahankan tidak akan memiliki ketergantungan pada nama file atau atribut lainnya?
13
Jawaban:
Hapus semua kecuali 1000 file acak dalam direktori
Kode:
Penjelasan:
/path/to/dir
denganfind
;print0
: gunakan\0
( karakter nol ) sebagai pembatas garis; jadi jalur file yang berisi spasi / baris baru tidak merusak skripsort
;-z
: gunakan\0
(karakter nol) sebagai pembatas, alih-alih\n
(baris baru)-R
: pesanan acaktail
;-z
: memperlakukan daftar sebagai nol-dibatasi (sama dengan dengansort
)-n +1001
: tampilkan baris mulai dari 1001 (mis. hilangkan 1000 baris pertama)xargs -0 rm
- hapus file yang tersisa;-0
: nol-dibatasi, lagiMengapa lebih baik daripada solusi quixotic *:
find
.find
tidak diakhiri dengan\n
(baris baru) karena beberapa alasan.* - kredit untuk quixotic untuk
| sort -R | head -1000
, memberi saya titik awal.sumber
find . -type f | sort -R | tail -n +1001 | xargs rm
find
? Saya akan mencoba meningkatkan jawaban saya, hanya butuh beberapa masukan untuk bekerja dengannya.tail: invalid option -- 'z'
versi ekor yang saya miliki adalah 8,4Gunakan direktori sementara, lalu
find
semua file Anda, acak daftar dengansort
, dan pindahkan 1000 teratas daftar ke direktori sementara. Hapus sisanya, lalu pindahkan file kembali dari direktori sementara.Jika
xargs
mengeluh tentang panjang garis, menggunakan sejumlah kecil denganhead
dan ulangi perintah yang diperlukan (yaitu, perubahan-1000
ke-500
dan menjalankannya dua kali, atau perubahan-200
dan menjalankannya 5 kali.)Ini juga akan gagal menangani nama file yang menyertakan spasi; sebagai @ rld ini jawaban menunjukkan, Anda dapat menggunakan
find
's-print0
argumen,-z
argumen untuksort
danhead
, dan-0
denganxargs
untuk memastikan penanganan nama file yang tepat.Akhirnya, jika
tmp-dir
sudah ada, Anda harus mengganti nama direktori yang tidak ada.sumber
find
menyertakan spasi.Untuk pengguna mac, skrip berikut harus dilakukan.
tr
akan memungkinkan sort dan tail untuk mengerjakan daftar dengan\n
alih - alih\0
.sumber
Cara termudah adalah dengan rm -rf direktori, lalu jalankan kembali skrip pembuatan data sambil memastikan tidak berjalan terlalu lama.
sumber