Apakah bash's * cocok dengan file dalam urutan alfanumerik?

25

Saya ingin menyatukan banyak file bersama dalam urutan nama file.

Apakah aman untuk menganggap bahwa ini akan memberi saya mereka dalam urutan alfanumerik?

cat * 

yaitu urutan yang sama yang lsmemberi.

dari sana
sumber

Jawaban:

26

Jawaban singkat: Ya itu akan.

Dari halaman bash man :

Setelah pemisahan kata, kecuali opsi -f telah ditetapkan (lihat The Set Builtin), Bash memindai setiap kata untuk karakter '*', '?', Dan '['. Jika salah satu karakter ini muncul, maka kata tersebut dianggap sebagai pola, dan diganti dengan daftar nama file yang diurutkan berdasarkan abjad yang cocok dengan pola tersebut.

BloodPhilia
sumber
6
Perhatikan bahwa "abjad" bervariasi tergantung pada pengaturan lokal (khususnya $LC_COLLATE).
grawity
4
@grawity benar, namun itu akan menghasilkan output yang sama seperti lspada sistem yang sama.
BloodPhilia
8

Jawaban singkatnya adalah ya, tetapi Anda harus waspada terhadap apa yang seharusnya menjadi urutan alfanumerik, karena mungkin tidak sesuai dengan urutan alami yang ada dalam pikiran Anda.

Misalnya, jalankan beberapa tes tentang bagaimana huruf besar dan kecil ditangani untuk mencari tahu di sistem Anda, serta urutan angka.

Masalah umum yang saya hadapi dalam memesan daftar file yang dikembalikan oleh glob adalah file bernomor. Saya sering diberi file bernomor seperti:

blah_1.txt
blah_2.txt
...
blah_10.txt
blah_11.txt

Namun, gumpalan yang menggunakan *tidak akan mengembalikan mereka dalam urutan ini, sebagai gantinya Anda akan mendapatkan sesuatu seperti:

blah_1.txt
blah_10.txt
blah_11.txt
...
blah_2.txt
blah_20.txt
...

Jadi - untuk menghindari masalah ini Anda akan baik perlu melakukan beberapa manipulasi pada daftar kembali file, atau file rename sehingga satu digit telah nol (yaitu blah_01.txt, blah_02.txt, dll).

dtlussier
sumber