¿Se garantiza que la expansión de un comodín en Bash esté en orden alfabético? Me veo obligado a dividir un archivo grande en piezas de 10 Mb para que puedan ser aceptadas por mi repositorio de Mercurial.
Entonces pensé que podría usar:
split -b 10485760 Big.file BigFilePiece.
y luego en lugar de:
cat BigFile | bigFileProcessor
Yo podría hacer:
cat BigFilePiece.* | bigFileProcessor
en su lugar.
Sin embargo, no pude encontrar ningún lugar que garantizara que la expansión del asterisco (también conocido como comodín *
) siempre estaría en orden alfabético, por lo que .aa
ocurrió antes .ab
(en lugar de ser un orden de marca de tiempo o algo así).
Además, ¿hay fallas en mi plan? ¿Qué tan grande es el costo de rendimiento de cat
reunir el archivo?
bash
files
wildcard
large-data
Trineo
fuente
fuente
sort
si necesita alguna manipulación de pedido adicional.hg commit
en unN
archivo MB requiere aproximadamente3 * N
MB de RAM yhg update
requiere aproximadamente2 * N
MB de RAM. Esto es con Mercurial 1.5 en Linux.Respuestas:
Sí, la expansión global es alfabética.
Desde la
man
página Bash :fuente
ls -l [[:lower:]]
lugar dels -l [a-z]
.mkdir lctest; cd lctest; touch w; touch z; ls -l [:lower:]; echo =====; ls -l [[:lower:]]
. El archivo "z" solo aparece en una lista por el segundols
porque está pidiendo nombres de archivo de una letra en minúscula. El primerols
, el que no tiene corchetes externos, es pedir nombres de archivo de un solo carácter de la lista de caracteres ":", "l", "o", "w", "e" y "r". En ambos casos, los corchetes más externos delimitan una expresión de corchete que enumera caracteres y clases. En el caso de[[:lower:]]
, los corchetes internos, los dos puntos y la palabra nombran una clase de caracteres. ...Es un comportamiento documentado para
bash
que pueda depender de él en sus scripts. También ha sido cierto para otros shells compatibles con Bourne durante mucho tiempo ... aunque puede haber casos de esquina con respecto al plegado de mayúsculas o caracteres no alfanuméricos.(La lista resultante, en
bash
, estará en un orden casi "ASCII-betical" --- excepto que las letras minúsculas y mayúsculas se clasificarán juntas como si no hubiera diferencias entre mayúsculas y minúsculas antes de sus equivalentes en mayúsculas. -alfabetics deben clasificarse en el mismo orden que aparecen en ASCII).Como otros han señalado, esto podría verse afectado por la configuración del entorno relacionado con el idioma: LANG en general y LC_COLLATE más específicamente. Es posible que sea más seguro ejecutar comandos que dependen del orden de expansión global bajo un
env
comando para limpiar el entorno (utilizando-i
o-u
según corresponda) o canalizar los resultadossort
para garantizar una secuencia sólida.fuente
Si bien las expansiones glob están ordenadas alfabéticamente, también obedecen a la configuración del idioma del caparazón.
Asegúrese de establecer esto en "C" en su secuencia de comandos si tiene la intención de que sea portátil.
fuente