Linux/Unix Shell Scripting - problema ejercicio shell

 
Vista:

problema ejercicio shell

Publicado por Jesus (2 intervenciones) el 16/06/2008 11:28:14
Hola, necesito realizar un par de ejercicios, y no tengo ni idea de como podría hacerlos. Si alguien me puede ayudar... Los ejercicios son los siguientes:

Haz un shell script llamado copia que copie todos los archivos que le pases por parámetros a un directorio nuevo llamado copias dentro del directorio home del usuario que le ha llamado. Deberás controlar si que los parámetros son correctos, es decir, que son todos archivos, porque este comando no copia directorios.

Haz un shell script llamado copiatodo que copie todos los archivos del directorio home del usuario que le ha llamado a otro directorio cuyo nombre o ruta se le pasa como parámetro y que puede o no estar copiado. No tienes porqué pasar los nombres de los archivos (o directorios) que están en el directorio home del usuario. Este archivo sí copia directorios.
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

RE:problema ejercicio shell

Publicado por Jesus (2 intervenciones) el 17/06/2008 17:15:45
Por favor que alguien me ayude...no tengo nada de idea de shell y necesito esos ejercicios...
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

RE:problema ejercicio shell

Publicado por Iván Garcerant (27 intervenciones) el 26/06/2008 08:55:17
El primero es un script para ser usado así:

$ copia archivo1 archivo2 archivo3

y el programa valida que solo sean archivos y en tal caso los copia en un directorio llamado ~/copias

Si es eso, el siguiente script lo hace:

#!/bin/sh

#comprobar que los argumentos sean todos archivos
for arg
do
if test -d "$arg"
then
echo "$arg es un directorio y este programa solo copia archivos"
exit -1
fi
done

#comprobar que el directorio de destino exista
if test ! -d ~/copias
then
mkdir ~/copias
fi

#ahora copiar los archivos de la línea de comandos
for arg
do
cp -vf "$arg" ~/copias
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

RE:problema ejercicio shell

Publicado por Iván Garcerant (27 intervenciones) el 26/06/2008 09:00:22
Ahora que el segundo es un poco más difícil por el tema de las posibles copias recursivas. Sin embargo, si obviamos ese detalle lo siguiente puede hacer el trabajo

#!/bin/sh

(cd $HOME ; tar cf - * ) | ( cd "$1" ; tar xf - )

#end

El uso de un pipe como el anterior es una forma antigua y muy conocida de copiar estructuras de directorios completas. El comando tar de hecho está muy optimizado al respecto y posiblemente lidie bien con el tema de las copias recursivas.

Ahora que en una versión más robusta yo comprobaría algunas cosas más, como por ejemplo, si me han indicado un directorio de destino. Pero esto genera más código y puede confundir un poco. Pero si no te molesta, podemos hacer otra versión con dichas comprobaciones:

#!/bin/sh

if test -z "$1" -o ! -d "$1"
then
echo "debe indicar el directorio destino"
exit -1
fi

(cd $HOME ; tar cf - * )|(cd "$1" ; tar xf - )

#end.

Cualquier problema pregunta... que los scripts estos no los he probado.
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