2 votos

En Terminal, el uso del comando "touch" para crear masivamente archivos consecutivos con ceros a la izquierda, con bash, produce resultados diferentes a los de zsh

En Terminal prefiero utilizar bash como mi shell por defecto. Emitiendo el comando touch File_{01..10}.txt produce estos resultados:

Archivo_1.txt, Archivo_10.txt, Archivo_2.txt, Archivo_3.txt, Archivo_4.txt, Archivo_5.txt, Archivo_6.txt, Archivo_7.txt, Archivo_8.txt, Archivo_9.txt

Como puede ver, no hay ceros a la izquierda en los nombres de los archivos.

Sin embargo, el uso de zsh , el mismo comando touch File_{01..10}.txt produce estos resultados:

Archivo_01.txt, Archivo_02.txt, Archivo_03.txt, Archivo_04.txt, Archivo_05.txt, Archivo_06.txt, Archivo_07.txt, Archivo_08.txt, Archivo_09.txt, Archivo_10.txt

Como puedes ver, zsh produce los resultados deseados con los ceros a la izquierda.

¿Hay alguna forma de configurar bash para producir los mismos resultados que zsh para su uso con el touch ¿comando?

2voto

Michael Zhou Puntos 167

Sin instalar un gestor de paquetes y luego una versión más reciente de su shell, podría trabajar con las herramientas que tiene. Utilizando el comando incorporado printf podrías

touch $(printf "file_%02d.txt " {1..10})

También puede utilizar el comando externo jot -

touch $(jot -s " " -w 'file_%02d.txt' 10)

Ahora bien, si quisieras utilizar la expresión de la secuencia bash5 {START..END[..INCREMENT]} entonces -

jot -s " " -w 'file_%02d.txt' 4 2 10

donde 4 es el número de veces que se imprime, 2 el incremento y 10 el valor máximo.

Por supuesto, después de todo, podría utilizar zsh dentro de tu shell "por defecto" para hacer el lifting-

zsh -c 'touch file_{01..10}.txt'

1voto

Phill Puntos 126

La versión de Bash incluida en MacOS es bastante antigua (3.2.57 a partir de Monterey 12.3.1) y no respeta los ceros a la izquierda cuando se expande {01..10} pero las nuevas versiones de Bash sí lo hacen (desde man bash ):

Una expresión de secuencia tiene la forma {x..y[..incr]}, donde x e y son son números enteros o caracteres simples, e incr, un incremento opcional, es un número entero. Cuando se suministran números enteros, la expresión se expande a cada número entre x e y, ambos inclusive. Los enteros suministrados pueden ir precedidos de 0 para forzar que cada término tenga la misma anchura. Si x o y comienzan con un cero, el intérprete de comandos intenta forzar que todos los términos generados para que contengan el mismo número de dígitos, con un relleno de cero cuando sea necesario.

Te recomiendo que instales Homebrew y luego Bash (5.1.16 en el momento de escribir este artículo), y configure el Terminal para utilizar esa versión en su lugar (corrija la ruta de acceso a continuación en consecuencia):

enter image description here

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X