Linux/Unix Shell Scripting - recibir nombres de fichero por parametro, comprimirlos y moverlos

 
Vista:

recibir nombres de fichero por parametro, comprimirlos y moverlos

Publicado por nazgul20 (4 intervenciones) el 12/03/2017 00:56:36
Estoy estudiando un modulo de informática y nos han pedido hacer el siguiente script:

"El programa recibe uno o más nombres de ficheros como argumentos a la línea de órdenes y en lugar de borrarlos los comprime con la orden gzip (si es que no están ya comprimidos) y los mueve a un directorio llamado ~/papelera."

No me aclaro como pasar los parámetros al file y luego comprimirlos y moverlos.


Gracias por adelantado!!!


ejecutamos: ./rms.sh archivo1.txt archivo2.gz

1
2
3
4
5
6
#!/bin/bash
#script rms.sh
 
if ! [ -d ~/paperera ]; then
mkdir ~/paperera
fi

##he encontrado esto para saber si están comprimidos, pero como compruebo los archivos pasados por parámetro???

$ file --mime-type archivo.gz

##lo mismo para comprimirlos y moverlos...
gzip filename.gz file1 file2 file3 -exec mv {} -t ~/paperera ;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 66
Plata
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

recibir nombres de fichero por parametro, comprimirlos y moverlos

Publicado por kip (17 intervenciones) el 12/03/2017 02:43:24
Hola, para acceder a un parametro enviado al script puedes intentarlo asi:

1
echo $1;

De esa forma mostraras por pantalla el primer parametro si existe este.

Para recibir los parametros y mostrarlos por pantalla sea cualquiera el numero de estos puedes hacerlo de esta forma:

1
2
3
4
for ((i = 1; i <= $#; i++))
do
    echo ${!i};
done

Donde $# significa el total de parametros que recibe el script, entonces al emplear el for mostramos las variables con ${!i}.

Creo que con ello podras realizar lo demas que necesitas.

Nos cuentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

recibir nombres de fichero por parametro, comprimirlos y moverlos

Publicado por nazgul20 (4 intervenciones) el 12/03/2017 13:35:57
Muchas gracias!!


Mas o menos lo he conseguido, aunque me da un error, veis como solucionarlo??

Error:

./rms.sh: línea 31: [application/gzip: No existe el fichero o el directorio
##la linea 31 es la del IF


CODIGO:

1
2
3
4
5
6
7
8
9
10
11
12
13
do
 
cadena1="application/gzip"
cadena2=$(file -b --mime-type ${!i})
 
 
	if [$cadena2 = $cadena1]; then
		mv ${!i} -t ~/paperera;
	else
		mv ${!i} -t ~/paperera;
		gzip -9 ~/paperera/${!i};
	fi
done
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

recibir nombres de fichero por parametro, comprimirlos y moverlos

Publicado por nazgul20 (4 intervenciones) el 12/03/2017 19:27:49
Perdon, me he dejado la primera línea del código, antes del do:

for ((i = 1; i <= $#; i++))


Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

recibir nombres de fichero por parametro, comprimirlos y moverlos

Publicado por nazgul20 (4 intervenciones) el 12/03/2017 19:59:56
Ya esta!!!

Definitivamente la línea del if estaba mal, era así:

if [ "$cadena2" == "$cadena1" ]; then




Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar