Tienes que ir haciendo la macro en el editor: no va a aparecer toda junta escrita, ni lo va a estar si tú no la escribes; entonces vete abriendo el editor y vas rellenando al ir contestando a las preguntas del sistema te diga.
Recuerda que, en algunos sistemas, puedes copiar desde el navegador y pegar en el editor cuando te sea cómodo.
A veces el sistema va tomando nota de tus respuestas, para ver si son coherentes con las siguientes. Si tienes que cortar y cierras sin más, tendrías que volver a empezar de cero la próxima vez. Para evitar eso, hay un botón que dice 'Parar' Púlsalo y guardará una cookie con los datos de por donde vas. Para continuar en otra ocasión, tendrás que usar el mismo navegador en el mismo equipo.
Cuando tengas el editor preparado, empieza viendo el enunciado.
./macro.sh casa pdf
Entonces, tras la llamada, todos los ficheros que acaben en .pdf
del subdirectorio casa
se llamarán .pdf.viejo
Asegúrate que entiendes el enunciado antes de continuar. Pregunta al profesor si no lo ves claro.
¿Entendido?, pues
Empezamos preparando la primera línea de la macro, con #!/bin/bash
, y los comentarios que creas oportunos. Vamos con los comandos.
No podemos usar mv
para cambiar todos los nombres de golpe, porque no lo admite. Entonces tenemos que pasar uno a uno, repitiendo la operación de cambio de nombre. Es decir, necesitamos un ciclo.
Vamos a ver cómo se organiza un ciclo de este tipo
Plantilla a poner | |
for variable in patrón
do
comandos
...
done
...
|
Siempre empieza con
for
Después va el nombre de una variable (el que queramos, y sin $) que es donde va a meter sucesivamente cada uno de los casos
Después la palabra
in
Después el patrón del que tiene que buscar todos los casos. Es decir, que habrá cosas como * ó ?
En la siguiente línea ponemos
do
En las siguientes líneas ponemos los comandos que hagan lo que sea con cada uno de los ítems. Lógicamente usarán la variable, que aparecerá con un $ delante
Tras los comandos, cerraremos el ciclo con una línea en que ponga
done
|
in
.
El segundo está bastante destrozado: la variable va sin $ en el for y si pone ? sólo cogerá los ficheros con nombre de una sola letra.
El tercero vale perfectamente.
in
for fich in directorio/*.sufijo
for $fich in 1, *.2
for fich in $1/*.$2
for $directorio/*.$sufijo
directorio
y el sufijo no es exactamente sufijo
, sino lo que haya dicho el usuario
directorio
y sufijo
do
y debajo la del done
, para que no se nos olvide. Entre ambas abre hueco que van los comandos de lo que hay que hacer con cada uno.
Y lo único que hay que hacer con cada uno es cambiarle el nombre, añadiéndole ".viejo". Para ello tenemos que usar el nombre de cada uno que lo tenemos en la variable.
Vamos a ver cómo usamos una variable en un comando
Plantilla a poner | |
comando ...$variable...
|
Donde haya que poner el valor se empieza poniendo un $
Después se pone el nombre de la variable
|
varfich
, veamos qué tal estaría:
varfich
. La segunda es la correcta.
fich
en el subdirectorio copias
, ¿qué tal:
messages
que está en el subdirectorio indicado por la variable subdir
, ¿qué tal:
.viejo
cp fich .viejo
cp $fich .viejo
mv fich fich.viejo
mv $fich $fich.viejo
cp
es para hacer una copia, no para cambiar el nombre.
cp
es para hacer una copia, no para cambiar el nombre.