Me gustaría crear muchos directorios usando mkdir. Cada nombre de directorio consistirá en un prefijo (una cadena) y un índice (un entero). Suponga que me gustaría que el prefijo sea "s" y que los índices oscilen entre 1 y 50. Esto significa que me gustaría crear directorios titulados:
s1, s2, ..., s49,s50
¿Hay alguna manera de hacer esto automáticamente mkdir? Gracias por tu tiempo.

bash. ¡Gracias por tu tiempo!s01,s02, ...,s49,s50. Si utilicé índices de ancho fijo,/bin/lscasi siempre produce el orden que quiero.Respuestas:
Puede hacer esto con un script de shell.
Pure sh: esto funcionará incluso en conchas de bourne pre POSIX
Si desea crear una gran cantidad de directorios, puede hacer que la secuencia de comandos sea más rápida reduciéndola a una sola llamada
mkdir, así como utilizando shell incorporado para pruebas y aritmética. Me gusta esto:Zsh, ksh93 o bash hacen esto mucho más fácil, pero debo señalar que esto no está integrado
mkdiry puede no funcionar en otros shells. Para casos más grandes, también puede verse afectado por los límites en el número o el tamaño total de los argumentos que se pueden pasar a un comando.fuente
n=$(( n + 1 ))habría sido tan estrictamente POSIX y no le costaría una subshell.[[palabra clave no es POSIX. (Sin mencionar que[es una concha incorporada en muchas conchas modernas.)[[funciona en miksh88(que es anteriorbash), así que supuse que era POSIX. No pude encontrar ninguna mención de ello en la especificación POSIX, así que creo que tienes razón. Gracias por la info!for i in {range}para los usuarios de shells avanzados.Uno
Dos
Esta opción funciona en bash , zsh y ksh93
Tres
fuente
$ique simplemente crear un directorio, por ejemplomkdir s$i ; echo $i > s$i/$i. Además, One es un ejemplo simple y agradable de usar un bucle for en bash ... en un sitio como este, no es nada improbable que un usuario novato lo vea y piense "bien, no me di cuenta de que podría hacer eso "---> iluminación.Muchas respuestas complicadas aquí, pero bash lo hace realmente fácil. Claro, la solución POSIX pura funciona, pero ¿por qué no aprovechar el
bashshell que está utilizando, de todos modos? Puede hacerlo fácilmente con la expansión de llaves :fuente
mkdir $(seq --format 's%.0f' 1 50)o si desea números con relleno de cero (lo que sería mejor para ordenar):
mkdir $(seq --format 's%02.0f' 1 50)o:
mkdir s$(seq -s ' s' -w 1 50)- tenga en cuenta la cadena 's' justo antes de la$(), sin ella el primer directorio creado será solo '01' en lugar de 's01'y finalmente:
mkdir $(printf "s%02i " $(seq 1 50))seqes de GNU Coreutilscuriosamente, seq
--formatu-fopción solo permite los tipos dobles de coma flotante de printf (como f y g. también un extraño formato hexadecimal de coma flotante para el que nunca he encontrado ningún uso). No tengo ni idea de porqué. Sería bueno si también admitiera otrosprintf(3)tipos numéricos como entero (d, i), octal (o, U) o hexadecimal (x, X).De todos modos, un formato doble con precisión decimal 0 como
%.0fo%02.0festá lo suficientemente cerca de un entero para este propósito.$ seq --ayuda Uso: seq [OPCIÓN] ... ÚLTIMO o: seq [OPCIÓN] ... PRIMERO ÚLTIMO o: seq [OPCIÓN] ... PRIMER INCREMENTO ÚLTIMO Imprima números de PRIMERO a ÚLTIMO, en pasos de INCREMENTO. -f, --format = FORMAT utiliza el formato printf de coma flotante FORMAT -s, --separator = STRING usa STRING para separar números (predeterminado: \ n) -w, --equal-width iguala el ancho rellenando con ceros a la izquierda - ayuda a mostrar esta ayuda y salir - versión de salida de información de versión y salida Si se omite FIRST o INCREMENT, el valor predeterminado es 1. Es decir, un el INCREMENTO omitido es 1 incluso cuando LAST es menor que FIRST. PRIMERO, INCREMENTO y ÚLTIMO se interpretan como valores de coma flotante. El INCREMENTO suele ser positivo si FIRST es menor que el LAST, y El INCREMENTO generalmente es negativo si PRIMERO es mayor que ÚLTIMO. FORMAT debe ser adecuado para imprimir un argumento de tipo 'double'; su valor predeterminado es% .PRECf si FIRST, INCREMENT y LAST son puntos fijos números decimales con la máxima precisión PREC, y hasta% g en caso contrario.Ver también: http://www.gnu.org/software/coreutils/manual/html_node/seq-invocation.html
fuente
{1,50}o{01,50}(para relleno cero) es mucho más fácil y más comprensible.Para ser diferente, aquí hay una solución POSIX sh que utiliza la recursividad:
fuente