Apakah perluasan wildcard di Bash dijamin dalam urutan abjad? Saya dipaksa untuk membagi file besar menjadi potongan-potongan 10 Mb sehingga mereka dapat diterima oleh repositori Mercurial saya.
Jadi saya berpikir saya bisa menggunakan:
split -b 10485760 Big.file BigFilePiece.
dan kemudian di tempat:
cat BigFile | bigFileProcessor
Saya bisa melakukan:
cat BigFilePiece.* | bigFileProcessor
di tempatnya.
Namun, saya tidak dapat menemukan tempat yang menjamin bahwa perluasan tanda bintang (alias wildcard, alias *
) akan selalu dalam urutan alfabet sehingga .aa
datang sebelum .ab
(sebagai lawan dari pemesanan timestamp atau sesuatu seperti itu).
Juga, apakah ada kekurangan dalam rencana saya? Seberapa hebat biaya kinerja dari cat
menggabungkan file?
bash
files
wildcard
large-data
Kereta luncur
sumber
sumber
sort
jika Anda memerlukan manipulasi pesanan tambahan.hg commit
padaN
file MB membutuhkan sekitar3 * N
MB RAM danhg update
membutuhkan sekitar2 * N
MB RAM. Ini dengan Mercurial 1.5 di Linux.Jawaban:
Ya, ekspansi globbing bersifat alfabet.
Dari
man
halaman Bash :sumber
ls -l [[:lower:]]
bukanls -l [a-z]
.mkdir lctest; cd lctest; touch w; touch z; ls -l [:lower:]; echo =====; ls -l [[:lower:]]
. File "z" hanya terdaftar oleh yang keduals
karena meminta nama file huruf tunggal lebih kecil. Yang pertamals
- yang tanpa tanda kurung kotak luar - meminta nama file karakter tunggal dari daftar karakter ":", "l", "o", "w", "e", dan "r". Dalam kedua kasus tanda kurung terluar membatasi ekspresi braket yang mencantumkan karakter dan kelas. Dalam kasus[[:lower:]]
, kurung kotak bagian dalam, titik dua dan kata nama kelas karakter. ...Itu adalah perilaku yang didokumentasikan
bash
sehingga Anda dapat bergantung padanya dalam skrip Anda. Hal ini juga berlaku untuk cangkang Bourne lain yang kompatibel untuk waktu yang sangat lama ... meskipun mungkin ada kasus sudut tentang kasus lipat atau karakter non-alfanumerik.(Daftar yang dihasilkan, dalam
bash
akan berada di urutan hampir "ASCII-betical" --- kecuali bahwa huruf kecil dan huruf besar akan disusun bersama seolah-olah tidak ada perbedaan huruf tetapi dengan huruf kecil disusun sebelum setara huruf besar mereka. Semua non -alfabet harus disusun dalam urutan yang sama seperti yang muncul di ASCII).Seperti yang telah ditunjukkan orang lain, ini bisa terganggu oleh pengaturan lingkungan terkait bahasa Anda: LANG secara umum dan LC_COLLATE lebih spesifik. In mungkin paling aman untuk menjalankan perintah yang bergantung pada pemesanan ekspansi global di bawah
env
perintah untuk membersihkan lingkungan (menggunakan-i
atau-u
jika perlu) atau menyalurkan hasilnyasort
untuk memastikan urutan yang kuat.sumber
Sementara ekspansi glob diurutkan berdasarkan abjad, mereka juga mematuhi pengaturan bahasa shell.
Pastikan untuk mengatur ini ke "C" di skrip Anda jika Anda bermaksud ini portabel.
sumber