Bash'de joker karakter genişletmelerinin düzenli olması garanti ediliyor mu?


53

Bash'deki bir joker karakterin genişlemesinin alfabetik sıraya göre yapılması garanti ediliyor mu? Mercurial depom tarafından kabul edilmeleri için büyük bir dosyayı 10 Mb parçaya bölmek zorunda kalıyorum.

Bu yüzden kullanabileceğimi düşünüyordum:

split -b 10485760 Big.file BigFilePiece.

ve sonra yerine:

cat BigFile | bigFileProcessor

Yapabilirim:

cat BigFilePiece.* | bigFileProcessor

burada.

Ancak, ben yıldız işareti (aka aka joker, genişlemesi garanti her yerde bulamadık *ki) her zaman alfabetik sırayla olurdu .aaönce gelen .ab(zaman damgası sipariş veya böyle bir şey olması aksine).

Ayrıca planımda herhangi bir kusur var mı? catDosyayı bir araya getirmenin performans maliyeti ne kadardır?


4
Elbette yanlış yaklaşıyorsun. Yönetici depodaki dosya boyutu için bir sınır koyarsa, onunla konuşmalısınız. Genişleme hakkında konuşmak - Genişlemenin alfanümerik olduğunu her zaman gördüm.
Mircea Vutcovici

1
sortHerhangi bir ek sipariş işlemine ihtiyaç duyarsanız , her zaman kanalizasyon yapabilirsiniz .
Warner

2
Mercurial'ın, sahip olduğunuz RAM miktarıyla sınırlandırılmış herhangi bir boyuttaki dosyayı yönetebildiğini lütfen unutmayın. Eğer büyük bir dosya eklerseniz bir uyarı alırsınız, çünkü Mercurial dosyayı bellekte tutacağını varsayar. Birleşmeler için Mercurial'ın iki dosyayı bellekte tutması gerekir. Az miktarda RAM bulunan makineler bu nedenle dosyayı kontrol etmekte zorlanabilir. Yeni test ettim ve hg commitbir NMB dosyası için yaklaşık 3 * NRAM RAM hg updategerektirir ve yaklaşık RAM RAM gerektirir 2 * N. Bu Linux'ta Mercurial 1.5 ile.
Martin Geisler

Yanıtlar:


67

Evet, globbing genişlemesi alfabetiktir.

Bash mansayfasından:

Pathname Genişletme

Sürece kelimesi yarma sonra, -fseçenek ayarlandığında, bash karakterleri için her kelimeyi tarar *, ?ve [. Bu karakterlerden biri belirirse, kelime bir kalıp olarak kabul edilir ve onun yerine eşleşen dosya adlarının alfabetik olarak sıralanmış bir listesi kullanılır.


@Dennis Williamson, Bir kullanıcının farklı bir dili ayarlanmış olması durumunda hala geçerli olup olmadığı hakkında bir fikriniz var mı?
Zoredache

5
@Zoredache: Aslında POSIX tarafından belirtilir: opengroup.org/onlinepubs/007908775/xsh/glob.html "Pathnames, LC_COLLATE kategorisinin geçerli ayarına göre sıralanır; XBD belirtimine bakın, LC_COLLATE [ opengroup.org / onlinepubs / 007908775 / xbd /… "ve bunun ls -l [[:lower:]]yerine böyle şeyler yapmalısınız ls -l [a-z].
Dennis Williamson,

Siparişin alfabetik olduğuna dikkat edin, bu nedenle BigFilePiece.10 BigFilePiece.2'den önce gelecek.2
Ken

@DennisWilliamson - Neden iki çift köşeli ayraç? Biri bana tamamen aynı çalışıyor gibi görünüyor.
ArtOfWarfare

2
@ArtOfWarfare: Bu deneyin: mkdir lctest; cd lctest; touch w; touch z; ls -l [:lower:]; echo =====; ls -l [[:lower:]]. "Z" dosyası yalnızca ikinci sırada listelenir, lsçünkü küçük harfli tek harfli dosya isimleri ister. Birincisi ls- dış köşeli parantez içermeyen - ":", "l", "o", "w", "e" ve "r" karakter listesinden tek karakterli dosya isimleri istiyor. Her iki durumda da en dıştaki köşeli parantezler karakterleri ve sınıfları listeleyen bir parantez ifadesini sınırlar. Bu durumda [[:lower:]], iç köşeli parantez, iki nokta üst üste ve kelime karakter sınıfına sahiptir. ...
Dennis Williamson,

4

Bunun için belgelenmiş bir davranış basholduğu için senaryolarınızda buna güvenebilirsiniz. Aynı zamanda, Bourne uyumlu diğer mermiler için de çok uzun zamandan beri geçerliydi ... ancak kasa katlama veya alfanümerik olmayan karakterlerle ilgili köşe davaları olabilir.

(Sonuçta ortaya çıkan liste, bash"ASCII-betical" sıralamasına göre sıralanacak --- bunun dışında, küçük ve büyük harflerin büyük / küçük harf eşleşmemiş gibi, büyük harf eşdeğerlerinden önce küçük harf ile harmanlanmış olmasıyla birlikte harmanlanması dışında. -alphabetics ASCII göründüğü gibi aynı sırayla harmanlamalıdır).

Diğerlerinin de belirttiği gibi, bunun dille ilgili ortam ayarlarınız tarafından engellenebileceği: genel olarak LANG ve LC_COLLATE. envÇevreyi temizlemek için bir komut altında glob genişleme sırasına bağlı olan komutları çalıştırmak ( uygun -iya -uda uygun şekilde kullanarak ) veya sortsağlam sıralama sağlamak için sonuçları iletmek en güvenli olabilir .


4
Sıralama sürecinde tüm alfanümerik olmayanların göz ardı edildiği görünmektedir . Bu nedenle, "=", "_", "~" bir dosyayı listeyi başlatmaya veya sonlandırmaya zorlamak için kullanılamaz.
Otheus,

3

Küre açılımları alfabetik olarak sıralanırken, kabuğun kordon ayarına da uyarlar.

Taşınabilir olmasını düşünüyorsanız, komut dosyanızda "C" ye ayarladığınızdan emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.