(6 jawaban)
Tutup 3 tahun yang lalu.
Saya memiliki skrip yang menghasilkan indeks berdasarkan setiap file dalam folder. Semua nama file adalah nomor dengan ekstensi.
Bagaimana saya bisa memodifikasi loop saya untuk memprosesnya dalam urutan numerik?
for file in xml/*.xml; do
...
done
Jawaban yang Diterima:
Jika Anda memiliki GNU sort
yang memiliki opsi untuk de-limit pada \0
pembatas yang dapat Anda lakukan. Dengan cara ini while
loop akan mulai mendapatkan file dalam urutan yang diurutkan untuk Anda proses. Ganti printf
pilihan dengan logika kustom Anda sendiri.
shopt -s nullglob
printf '%s\0' xml/*.xml | sort -zV | while read -rd '' file; do
printf "%s\n" "$file"
done
shopt -u nullglob
nullglob
pilihannya adalah untuk mencegah Shell memperluas gumpalan kosong jika tidak ada xml
file ditemukan di folder saat ini. Opsi -u
menghapusnya setelah pemrosesan Anda selesai.
Seperti yang ditunjukkan Tony Speight dengan tepat, jika Anda tidak ingin mengacaukan opsi shell (misalnya mungkin diaktifkan karena alasan lain), Anda bisa mengatur di sub-kulit dan membiarkan ekspansi glob terjadi
( shopt -s nullglob; printf '%s\0' xml/*.xml ) | sort -zV | while read -rd '' file; do
printf "%s\n" "$file"
done