Saya telah melihat banyak pertanyaan dan jawaban di sini menggunakan konstruksi di sepanjang baris
list_dir=`ls -t /path/to/dir/`
for i in $list_dir; do
atau
ls -t | while read i; do
Sekarang, saya tahu bahwa Anda tidak boleh menggunakan ls dalam skrip karena mudah rusak; tetapi saya tidak dapat menemukan cara yang lebih baik untuk beroperasi pada file dalam urutan dari yang terakhir diubah ke yang paling baru-baru ini dimodifikasi (atau sebaliknya).
Saya dapat menggunakan sesuatu seperti:
find . -type f -printf '%T@ %p\n' | sort -n | cut -d ' ' -f 2- | while read i; do...
... tetapi ini masih akan terputus dengan file apa pun yang memiliki baris baru dalam namanya, dan jauh lebih jelek untuk di-boot. Apakah ada cara yang lebih baik?
--zero-terminated
- terima kasih untuk itu, saya berharap saya bisa memberi Anda lebih banyak poin!info ls
: jika saya ingin skrip antipeluru dengan ls, yang--quoting-style
harus saya gunakan?--quoting-style=escape
adalah cara untuk memilih.ls
--quoting-style
gagal (untuk parsing purposea) karena hanya mengutip nama file: ketika Anda memiliki ruang dalam nama grup. Ok, ini kasus yang sangat strage, tetapi itu muncul di cygwin bash shell, di sini Anda memiliki nama grup sepertiDomain Users
.Cara termudah sejauh ini adalah menggunakan zsh. Jenis kualifikasi glob
om
cocok dalam urutan kronologis terbalik; gunakanOm
untuk urutan kronologis.The
N
kualifikasi glob menyebabkan pola untuk memperluas ke daftar kosong jika direktori kosong. Buat ini*(DNom)
agar sesuai dengan file dot.sumber