Apa yang akan menjadi cara terbaik untuk membuat daftar 100 file pertama dalam direktori yang diurutkan berdasarkan cap waktu yang dibuat (terlama dulu). Direktori ini cukup besar (sekitar 100000 file).
Dipipis ke kepala membutuhkan waktu yang lama untuk diselesaikan.
Edit:
- Filesystem adalah ext3.
- membatasi jumlah file dalam folder tidak sepadan dengan usaha, karena ini akan menjadi operasi "pembersihan" yang langka dan file dihasilkan oleh perangkat lunak pihak ke-3.
- Menggunakan waktu yang dimodifikasi file , alih-alih waktu pembuatan menyediakan dan solusi yang dapat diterima.
find -mtime +<number of days> -delete
membersihkan semua file yang lebih tua dari usia tertentu. Itu berarti tidak ada jenis yang diperlukan.Jawaban:
Anda mengatakan bahwa " ls disalurkan ke kepala memakan waktu yang lama sekali untuk lengkap".
Penyebabnya bukan
ls
, tetapi jumlah file di direktori Anda. Jika Anda memiliki 100.000 file dalam satu direktori, cara apa pun untuk menyelesaikan masalah ini harus mendapatkan informasi tentang semua 100.000 file sebelum dapat berpikir tentang mengurutkannya atau mencetak output apa pun.Jika terlalu lama, solusi sebenarnya adalah memecah file menjadi beberapa direktori.
Jika Anda tidak dapat menyebarkan file ke beberapa direktori, apakah ada cara untuk mempersempit jumlah file yang perlu dipertimbangkan ? mis. jika nama file menyertakan tanggal, mungkin Anda bisa memasukkan wildcard sehingga sistem tidak perlu mengurutkan 100.000 file. Atau mungkin mereka diberi nomor urut? (Ini mungkin atau mungkin tidak membantu, tetapi patut dicoba.)
Berapa kali Anda mencoba melakukan ini? Mungkin ada baiknya menyimpan / menyimpan output untuk digunakan kembali .
Sekarang, sebuah pertanyaan.
Apakah Anda yakin maksud Anda "waktu pembuatan" dan bukan "ubah waktu" ? Sebagian besar alat hanya dapat menampilkan "ubah waktu", bukan "waktu pembuatan".
Mendapatkan "waktu pembuatan" adalah hal yang sangat baru, yang membutuhkan sistem file ext4, dan beberapa alat yang tidak mudah dipasang.
Jika Anda ingin mengubah waktu
Ubah waktu (singkatnya waktu) berarti waktu atribut file terakhir berubah.
ls -c
macam berdasarkan waktu.Anda ingin output dalam urutan naik, bukan turun, jadi Anda perlu membalikkan output dengan
-r
opsi juga.Jadi Anda bisa melakukannya seperti ini:
Solusi yang lebih lama untuk masalah yang sama menggunakan
stat
:tapi itu berjalan lebih lambat dari
ls -cr
pada sistem saya.Jika Anda menginginkan waktu modifikasi
Waktu modifikasi (singkatnya mtime) berarti waktu isi file terakhir diubah.
ls -t
mengurutkan berdasarkan mtime.Ubah
ls -cr
kels -tr
(opsi terbaik) atau ubahstat -c $'%Z\t%n'
kestat -c $'%Y\t%n'
.Jika Anda membutuhkan waktu pembuatan
(singkatnya crtime)
Ini lebih sulit.
Pertama, pastikan direktori berada pada sistem file yang diformat menggunakan
ext4
. Kamu bisa memakaitune2fs -l <device name>
untuk memeriksa ini.Lalu, ada
stat
format baru yang disebut%W
, yang dapat membantu Anda di sini. Untuk mendapatkannya, Anda harus mengunduh versi GNU Coreutils dirilis pada Oktober 2010 atau setelahnya, ekstrak, kompilasi, dan instal.Kemudian, tergantung pada kernel Anda, ini mungkin berhasil (belum mencobanya).
Lihat juga:
Jika Anda mendapatkan kesalahan tentang
"'$\t'
The
'$\t'
notasi membutuhkanbash
atauzsh
: tidak akan bekerja didash
ataush
di Ubuntu. Jika Anda benar-benar perlu menggunakan cangkang itu, Anda harus mengubah apa pun\t
menjadi Ctrl+ V, Tabdan menghapus yang memimpin$
dari sesaat sebelum kutipan pembukaan.sumber
Cara lain jika ditemukan melakukan sesuatu hari ini mungkin relevan dengan masalah kinerja Anda:
Seharusnya secara teori mulai menghasilkan jauh lebih cepat tapi saya kira itu tergantung dari mana lag berasal. Mungkin hanya butuh
ls
waktu lama untuk mengurutkan file.sumber
head
sebenarnya keluar segera setelah input cukup dibaca. Coba jalankan keduanya dengantime
di depan. Thehead
Versi jauh lebih cepat pada sistem saya pula.