He estado aprendiendo a programar con un libro introductorio realmente genial para C y escribo cada ejemplo y cada tarea para poder aprender la sintaxis de memoria. Hice todos los archivos manualmente hasta ahora, pero hacer clic, nombrar y guardar se vuelve agotador.
Necesito una manera de crear varios archivos como bspl0001.c
, bspl0002.c
, bspl0003.c
, etc, y guardarlos en el directorio "learning_c" o algo así.
Soy un novato con Ubuntu / Linux y honestamente solo lo ejecuto a través de VirtualBox porque el IDE Geany fue fácil de configurar. Por lo tanto, no sé realmente cómo funciona la Terminal.
editar Me acabo de encontrar en esta antigua cuenta mía y estoy sacudiendo la cabeza sobre por qué querría aprender una sintaxis de código de memoria. Curiosamente, casi termino con mis estudios de CS / Math BSc. Muchas gracias por la ayuda en retrospectiva!
fuente
Respuestas:
Puede hacer esto con estos comandos:
Explicación:
mkdir learning_c
learning_c
en la carpeta actual~
cd
comando (es decircd Desktop
)cd learning_c
touch bspl{0001..0003}.c
touch
es una herramienta para crear archivos vacíos y modificar marcas de tiempo; Estamos creando archivos vacíos.touch myfile
creará un archivo vacío llamadomyfile
.El código feo que sigue (
bspl{0001..0003}.c
) se llama expansión de llaves . Esta es una gran característica delbash
shell que le permite crear largas listas de combinaciones de cadenas arbitrarias. Puede obtener más información sobre esto en Bash Hackers Wiki . En este caso, hará una larga lista de parámetros a los que se pasarátouch
. También puede usar su equivalente largo:Puede cambiar la cantidad de archivos: si desea 12 archivos, puede ejecutarlos
bspl{0001..0012}.c
.0012
lugar de12
) se aseguran de que la salida utilice 4 dígitos rellenados con ceros.fuente
touch bspl000{1..3}.c
touch {test,tes2,tes3}.js
touch tes{t,2,3}.js
Cree un archivo numerado correctamente (siguiente) con una combinación de teclas de acceso directo
¿Por qué crear todos los archivos a la vez? La desventaja es que tendrá muchos archivos vacíos y sin usar. Lo que realmente estoy usando: presione una combinación de teclas para:
Todo en una pulsación de tecla. De esa forma, evita muchos archivos (aún) no utilizados; Los archivos solo se crean si los necesita.
Una versión simplificada a continuación (no ejecuta el paso 3). En cada pulsación de tecla, creará un archivo numerado correctamente como:
Cómo utilizar
Ejecute el script desde un acceso directo: Configuración del sistema> Teclado> Accesos directos personalizados. Agrega el comando:
fuente
Puede usar el siguiente código de Python, puede modificarlo para adaptarlo a sus necesidades.
Guarde el siguiente código con nombre de archivo
filecreator.py
Y luego ejecútelo con este comando:
fuente
El
bash
camino es bueno, pero ¿qué pasa si está trabajando con un shell que no admite la expansión de llaves?touch file{1..10}
no funciona para mí,mksh
por ejemplo. Aquí hay tres formas alternativas que funcionan independientemente del shell.seq
Un enfoque más neutral para la shell sería combinar el
seq
comando para generar una secuencia de números formateados conprintf
opciones y pasarlo alxargs
comando. Por ejemplo,Perl
Por supuesto, Perl, al ser una herramienta bastante amplia * nix, también puede hacerlo. El comando específico de una línea que tenemos aquí es el siguiente:
Efectivamente, lo que sucede aquí es que especificamos 3 argumentos de línea de comandos: prefijo de nombre de archivo, índice inicial e índice final. Luego, usamos
do { } for $ARGV[1] .. $ARGV[2]
para iterar para un rango específico de números. Digamos que$ARGV[1]
tenía 5 y$ARGV[2]
9, iteraríamos sobre 5,6,7,8 y 9.¿Qué sucede en cada iteración dentro de las llaves? tomamos cada número especificado con
$_
, y usando lasprintf()
función creamos una cadena m que divide el prefijo (primer argumento de la línea de comando$ARGV[0]
) y el número dado, pero completa el número con 4 ceros (que se hace porprintf
estilo de formato,%04d
parte), y adjunte el.c
sufijo. Como resultado de cada iteración creamos un nombre comobspl0001.c
.El
open(my $fh, ">", $var);close($fh)
efectivamente actúa comotouch
comando, creando un archivo con un nombre especificado.Aunque es un poco largo, funciona bastante bien, de manera similar al script de python de Jacob Vlijm. También se puede convertir a un script para facilitar la lectura si lo desea, de esta manera:
Vamos a probar esto. Primero el one-liner:
Y ahora el guión:
awk
Otro enfoque sería
awk
, ejecutando un bucle for, redirigiendo a un archivo específico. El enfoque es similar al perl one-liner con argumentos de línea de comandos. Si bienawk
es principalmente una utilidad de procesamiento de texto, aún puede hacer una programación genial del sistema.fuente