Ketika saya menjalankan perintah ini,
grep _rlnAveragePmax *model*
Saya mendapatkan hasil ini:
run_ct6_it006_model.star:_rlnAveragePmax 0.153500
run_ct6_it007_model.star:_rlnAveragePmax 0.096772
run_it000_model.star:_rlnAveragePmax 0.000000
run_it001_model.star:_rlnAveragePmax 0.008995
run_it002_model.star:_rlnAveragePmax 2.517429e-04
run_it003_model.star:_rlnAveragePmax 0.003727
run_it004_model.star:_rlnAveragePmax 0.056681
run_it005_model.star:_rlnAveragePmax 0.109754
run_it006_model.star:_rlnAveragePmax 0.153500
Tetapi output di atas diurutkan berdasarkan abjad. Jika kami mengurutkannya berdasarkan waktu + tanggal dibuat, hasilnya akan terlihat seperti ini:
run_it000_model.star:_rlnAveragePmax 0.000000
run_it001_model.star:_rlnAveragePmax 0.008995
run_it002_model.star:_rlnAveragePmax 2.517429e-04
run_it003_model.star:_rlnAveragePmax 0.003727
run_it004_model.star:_rlnAveragePmax 0.056681
run_it005_model.star:_rlnAveragePmax 0.109754
run_it006_model.star:_rlnAveragePmax 0.153500
run_ct6_it006_model.star:_rlnAveragePmax 0.153500
run_ct6_it007_model.star:_rlnAveragePmax 0.096772
Apa yang harus saya lakukan untuk perintah grep saya untuk mendapatkan output diurutkan berdasarkan waktu + tanggal dibuat?
zsh
.Jawaban:
Kecuali Anda menjalankan macOS, tanggal file dibuat tidak disimpan. Konsep itu tidak didefinisikan dengan baik, karena mengedit file sering membuat file baru yang menggantikan versi sebelumnya. Apa yang dicatat adalah tanggal file terakhir diubah (yang mencakup penciptaan awal dan edit berikutnya).
Cara termudah untuk menyortir file berdasarkan waktu modifikasinya adalah dengan menjalankan zsh (berbeda dengan cangkang lain yang kurang kuat seperti bash, ksh atau fish). Di zsh, Anda dapat menggunakan kualifikasi glob seperti
Om
untuk mengurutkan file berdasarkan waktu modifikasi (terlama lebih dulu, buat yangOm
paling muda dulu).Itu memberikan hasil yang diinginkan sejak
grep
melintasi file dalam urutan yang diberikan pada baris perintah.sumber
Pertama, lakukan pengurutan waktu ls, dan kemudian pipa stdout untuk melihat-lihat xargs, menggunakan flag -H untuk memasukkan nama file (karena akan melakukannya hanya untuk satu file, default tidak menyertakan nama file)
Pada grep pertama setelah ls, direktori dikecualikan (anggap ini bukan pencarian rekursif dari contoh yang Anda berikan). Grep kedua setelah ls, memfilter untuk nama file (tanpa xargs)
Perbarui setelah komentar berharga Wildcard: Untuk memperhitungkan semua kasus di mana nama file mungkin memiliki karakter aneh, nomor inode diekstraksi dari ls, dan disalurkan ke "find" untuk pencocokan nomor inode dan menjalankan perintah grep. xargs diganti dengan "while read line" karena akan ada dua {} yang tidak bisa dibedakan oleh perintah xargs
Symlink diikuti, hanya file yang disertakan, tidak termasuk direktori, dll. Argumen maxdepth berlebihan dalam konteks ini (hanya file yang tersisa) namun saya menyertakannya sehingga pencarian rekursif juga dimungkinkan, dengan mengubah argumen:
sumber
ls
. Secara umum, Anda tidak boleh menganggap nama file tidak boleh berisi karakter aneh seperti baris baru .zsh
untuk use case ini.find
.