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 ls
da.
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.
$LC_COLLATE
).ls
en el mismo sistema.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:
Sin embargo, un globo que usa el
*
no los devolverá en este orden, en su lugar obtendrá algo como: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.).fuente