¿Bash * coincide con los archivos en orden alfanumérico?

25

Quiero concatenar un montón de archivos juntos en orden de nombre de archivo.

¿Es seguro asumir que esto me dará en orden alfanumérico?

cat * 

es decir, el mismo orden que lsda.

de allí
fuente

Respuestas:

26

Respuesta corta: Sí, lo hará.

Desde la página de manual de bash :

Después de la división de palabras, a menos que se haya establecido la opción -f (ver The Set Builtin), Bash escanea cada palabra para los caracteres '*', '?' Y '['. Si aparece uno de estos caracteres, la palabra se considera un patrón y se reemplaza por una lista ordenada alfabéticamente de nombres de archivos que coinciden con el patrón.

BloodPhilia
fuente
66
Tenga en cuenta que "alfabético" varía según la configuración regional (en particular $LC_COLLATE).
Grawity
44
@grawity true, sin embargo, daría como resultado la misma salida que lsen el mismo sistema.
BloodPhilia
8

La respuesta corta es sí, pero debe ser consciente de lo que cree que debería ser el orden alfanumérico, ya que puede no corresponder con el orden natural que tiene en mente.

Por ejemplo, ejecute alguna prueba sobre cómo se manejan las mayúsculas y minúsculas para averiguar en su sistema, así como las secuencias de números.

Un problema común con el que me he encontrado al ordenar listas de archivos devueltos por un globo es el de los archivos numerados. A menudo me dan archivos numerados como:

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

Sin embargo, un globo que usa el *no los devolverá en este orden, en su lugar obtendrá algo como:

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

Por lo tanto - para evitar este problema que se tendrá que hacer alguna manipulación en la lista devuelta de archivos o archivos de cambio de nombre por lo que un solo dígito haya cero a la izquierda (es decir blah_01.txt, blah_02.txt, etc.).

dtlussier
fuente