script para copiar archivos del disco duro externo

Imagen de nacho tineo
8 puntos

Después de un caso que me paso me pregunto como seria para hacer el siguiente trabajo.

Cuando un SO deja de funcionar muchas veces tengo que salvar los datos pinchando el disco por usb con mi ubuntu.Pero me da bastante curro por que la gente ya se sabe guarda las cosas donde les da la gana por eso quería hacer un scrip que cumpla las siguientes funciones.

Crear unos directorios en mi ubuntu para volcar los datos salvados.
Buscar en el disco duro los archivos correspondientes *.doc *.avi *.jpg *.pfd *.mp3 ..... etc
Copiar dichos archivos al los directorios creados.

Me pasa por la cabeza algo así

#!/bin/bash
mkdir /home/nacho/salvar/fotos
mkdir /home/nacho/salvar/documentos
mkdir /home/nacho/salvar/videos
mkdir /home/nacho/salvar/musica
find /media -iname "*.avi" | xargs cp -r /home/nacho/salvar/videos
find /media -iname "*.jpg" -a -size +1M | xargs cp -r /home/nacho/salvar/fotos
find /media -iname "*.mp3" | xargs cp -r /home/nacho/salvar/musica

y así con cada uno pero no sirve después probé con.
find /media -iname "*.mp3" -exec cp -r /home/nacho/salvar/musica
pero me dice: find: falta un parámetro para «-exec»

Todo esto es para ahorrarme trabajo y para que no me pase otra vez ,dejar algún documento sin salvar.
Gracias

Imagen de razaAztk
+1
0
-1

find /media -iname "*.mp3" -exec cp '{}' /home/nacho/salvar/musica/ \;

Saludos!

+1
0
-1

void hey(int x,int y)
{
if (x && y)
 printf("http://libertadhack.blogspot.com/");
else
 printf("http://libertadpunk.blogspot.com/");
}
Imagen de nacho tineo
+1
0
-1

Muchas gracias ahora veo por que no me funcionaba antes.

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de Alcruz
+1
0
-1

En primer lugar, es fundamental que todas las particiones tanto de los DD internos como el que hará de respaldo tengan etiquetas, aaj-i te paso un script que hice para respaldar todos los .pdf que tenía dispersos en una partición con la etiqueta E, la idea era copiarlos a todos a un DD externo con etiqueta F en una carpeta aaa.

!/bin/bash
find /media/E -iname "*.pdf" > 111
while read line; do
cp "$line" /media/F/aaa
done < 111
rm 111
Tuve que hacerlo así por tener problemas on los archivos que tienen varios nombres, de allí que la variable "$line" está entre comillas.

+1
0
-1
Imagen de nacho tineo
+1
0
-1

Me quedo con el comando del compañero al ser mas simple.
Pero se agradece el detalle.

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de nacho tineo
+1
0
-1

Bueno creo que funciona pero como seria para ver el proceso tengo algo como esto:

#!/bin/bash
#comienza la creacion de direcctorios
mkdir /home/nacho/salvar/
mkdir /home/nacho/salvar/fotos
mkdir /home/nacho/salvar/documentos
mkdir /home/nacho/salvar/videos
mkdir /home/nacho/salvar/musica
#comienza a copiar archivos
find /media -iname "*.jpg" -a -size +250k -exec cp -v '{}' /home/nacho/salvar/fotos/ \;
find /media -iname "*.jpeg" -a -size +250k -exec cp -v '{}' /home/nacho/salvar/fotos/ \;
find /media -iname "*.doc" -exec cp -v '{}' /home/nacho/salvar/documentos/ \;
find /media -iname "*.xls" -exec cp -v '{}' /home/nacho/salvar/documentos/ \;
find /media -iname "*.pdf" -exec cp -v '{}' /home/nacho/salvar/documentos/ \;
find /media -iname "*.rar" -exec cp -v '{}' /home/nacho/salvar/documentos/ \;
find /media -iname "*.zip" -exec cp -v '{}' /home/nacho/salvar/documentos/ \;
find /media -iname "*.avi" -exec cp -v '{}' /home/nacho/salvar/videos/ \;
find /media -iname "*.mpg" -exec cp -v '{}' /home/nacho/salvar/videos/ \;
find /media -iname "*.mpeg" -exec cp -v '{}' /home/nacho/salvar/videos/ \;
find /media -iname "*.mp4" -exec cp -v '{}' /home/nacho/salvar/videos/ \;
find /media -iname "*.wmv" -exec cp -v '{}' /home/nacho/salvar/videos/ \;
find /media -iname "*.wma" -exec cp -v '{}' /home/nacho/salvar/videos/ \;
find /media -iname "*.mov" -exec cp -v '{}' /home/nacho/salvar/videos/ \;
find /media -iname "*.mp3" -exec cp -v '{}' /home/nacho/salvar/musica/ \;
echo "termina todo"

le doy a ejecutar terminal y funciona bien pero no veo si se comenten los errores es decir si no puede copiar algún archivo. como seria para crear un log o varios me da = con los posibles errores.
gracias compañeros

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de nacho tineo
+1
0
-1

La cantidad de cosas que estoy aprendiendo y el trabajo que se ahorra uno.

#!/bin/bash
# comienza la creacion de direcctorios
mkdir /home/nacho/salvar/
mkdir /home/nacho/salvar/fotos
mkdir /home/nacho/salvar/documentos
mkdir /home/nacho/salvar/videos
mkdir /home/nacho/salvar/musica
#comienza a buscar y copiar archivos
find /media -iname "*.jpg" -a -size +250k -exec cp -v '{}' /home/nacho/salvar/fotos/ \; | tee jpg
find /media -iname "*.jpeg" -a -size +250k -exec cp -v '{}' /home/nacho/salvar/fotos/ \; | tee jpeg
find /media -iname "*.doc" -exec cp -v '{}' /home/nacho/salvar/documentos/ \; | tee doc
find /media -iname "*.xls" -exec cp -v '{}' /home/nacho/salvar/documentos/ \; | tee xls
find /media -iname "*.pdf" -exec cp -v '{}' /home/nacho/salvar/documentos/ \; | tee pdf
find /media -iname "*.rar" -exec cp -v '{}' /home/nacho/salvar/documentos/ \; | tee rar
find /media -iname "*.zip" -exec cp -v '{}' /home/nacho/salvar/documentos/ \; | tee z
find /media -iname "*.avi" -exec cp -v '{}' /home/nacho/salvar/videos/ \; | tee avi
find /media -iname "*.mpg" -exec cp -v '{}' /home/nacho/salvar/videos/ \; | tee mpg
find /media -iname "*.mpeg" -exec cp -v '{}' /home/nacho/salvar/videos/ \; | tee mpeg
find /media -iname "*.mp4" -exec cp -v '{}' /home/nacho/salvar/videos/ \; | tee mp4
find /media -iname "*.wmv" -exec cp -v '{}' /home/nacho/salvar/videos/ \; | tee wmv
find /media -iname "*.wma" -exec cp -v '{}' /home/nacho/salvar/videos/ \; | tee wma
find /media -iname "*.mov" -exec cp -v '{}' /home/nacho/salvar/videos/ \; | tee mov
find /media -iname "*.mp3" -exec cp -v '{}' /home/nacho/salvar/musica/ \; | tee mp3
#creacción de log
cat jpg jpeg doc xls pdf rar z avi mpg mpeg mp4 wmv wma mov mp3 > total

Solo me queda pendiente el reporte de un log con los posibles errores si veis algún fallo no dudéis en decírmelo,sera mejor corregirlo ahora que estoy haciendo las pruebas en un usb que cuando me disponga a salvar todos los datos de un amigo jjj

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de nacho tineo
+1
0
-1

#!/bin/bash
# comienza la creacion de direcctorios
mkdir /home/nacho/salvar/
mkdir /home/nacho/salvar/fotos
mkdir /home/nacho/salvar/documentos
mkdir /home/nacho/salvar/videos
mkdir /home/nacho/salvar/musica
#comienza a buscar y copiar archivos
find /media -iname "*.jpg" -a -size +250k -exec cp -v -i '{}' /home/nacho/salvar/fotos/ \; | tee jpg
find /media -iname "*.jpeg" -a -size +250k -exec cp -v -i '{}' /home/nacho/salvar/fotos/ \; | tee jpeg
find /media -iname "*.doc" -exec cp -v -i '{}' /home/nacho/salvar/documentos/ \; | tee doc
find /media -iname "*.xls" -exec cp -v -i '{}' /home/nacho/salvar/documentos/ \; | tee xls
find /media -iname "*.pdf" -exec cp -v -i '{}' /home/nacho/salvar/documentos/ \; | tee pdf
find /media -iname "*.rar" -exec cp -v -i '{}' /home/nacho/salvar/documentos/ \; | tee rar
find /media -iname "*.zip" -exec cp -v -i '{}' /home/nacho/salvar/documentos/ \; | tee z
find /media -iname "*.avi" -exec cp -v -i '{}' /home/nacho/salvar/videos/ \; | tee avi
find /media -iname "*.mpg" -exec cp -v -i '{}' /home/nacho/salvar/videos/ \; | tee mpg
find /media -iname "*.mpeg" -exec cp -v -i '{}' /home/nacho/salvar/videos/ \; | tee mpeg
find /media -iname "*.mp4" -exec cp -v -i '{}' /home/nacho/salvar/videos/ \; | tee mp4
find /media -iname "*.wmv" -exec cp -v -i '{}' /home/nacho/salvar/videos/ \; | tee wmv
find /media -iname "*.wma" -exec cp -v -i '{}' /home/nacho/salvar/videos/ \; | tee wma
find /media -iname "*.mov" -exec cp -v -i '{}' /home/nacho/salvar/videos/ \; | tee mov
find /media -iname "*.mp3" -exec cp -v -i '{}' /home/nacho/salvar/musica/ \; | tee mp3
#creacción del log
cat jpg jpeg doc xls pdf rar z avi mpg mpeg mp4 wmv wma mov mp3 > log
#borrado de log parciales
rm -v jpg jpeg doc xls pdf rar z avi mpg mpeg mp4 wmv wma mov mp3

le marque a cp -i para evitar duplicados en los archivos todos sabemos que solemos guardarlos en varios sitios las mismas cosas.
Ahora solo me queda crear un log para los posibles errores.
Saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de Alcruz
+1
0
-1

Yo no me complicaría tanto, sugiero eliminar las extensiones semejantes a | tee mov que para lo único que sirven es para producir interrupciones, sugiero para mayor seguridad modificar las opciones de cp en vez de poner cp -v-i pones cp -viu . La idea es que repitas la ejecución del script , será rápida ya que la nueva opción de cp o sea u , es "update"

+1
0
-1
Imagen de nacho tineo
+1
0
-1

Lo de poner cp -viu entiendo pero lo de lo de repetir la ejecución?
solo lo necesito para rescatar algunos archivos de discos duros que su sistema a dejado de funcionar y no tener que ir mirando si me dejo alguno.(como ya me paso)
saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de MrTulias
+1
0
-1

Perdona, yo no tengo ni idea (intento aprender algo viendo lo que hacéis los que sabéis), me surge una duda... En las últimas órdenes, las de los log, veo que pones lo que son las extensiones de los ficheros que estás manejando con las órdenes anteriores... Entre rar y avi , en lugar de zip pones sólo z... ¿vale con poner parte?

Saludos

+1
0
-1

"To do is to be" (Nietzsche)
"To be is to do" (Kant)
"Do be do be do" (Sinatra)

Imagen de nacho tineo
+1
0
-1

No en lo que se refiere a los log lo que esta manejando es el nombre del log es decir lo que saca detrás del comando tee no de las extensiones lo que pasa que para que me sea mas fácil leerlo le doy el mismo nombre pero no se porque si pongo zip me lo colorea en otro color lo que me hace pensar que no esta bien la cosa jjj.

esta linea coge todos los log creados y los junta en uno solo no tiene nada que ver con las extensiones de los archivos
cat jpg jpeg doc xls pdf rar z avi mpg mpeg mp4 wmv wma mov mp3 > log

y aquí borra los log anteriores pero me deja el ultimo con todos los datos de la operación
rm -v jpg jpeg doc xls pdf rar z avi mpg mpeg mp4 wmv wma mov mp3

Espero que te aclare un poco dado que no dejo de ser un novato y voy aprendiendo a base de leer y sobre todo de los compañeros de este foro que los hay que dejan a uno anonadado.
saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de MrTulias
+1
0
-1

Gracias por la aclaración, a ver si algún día (o año) aprendo a hacer cosicas de éstas para que el ordenador trabaje para mi en lugar de trabajar yo para él ;-)

Saludos

+1
0
-1

"To do is to be" (Nietzsche)
"To be is to do" (Kant)
"Do be do be do" (Sinatra)

Imagen de KIKERAP
+1
0
-1

Comprobado funciona correctamente:

#!/bin/bash
mkdir -p ~/salvar/fotos && mkdir ~/salvar/documentos && mkdir ~/salvar/videos && mkdir ~/salvar/musica

find /media -regextype posix-egrep -regex '.*\.(jpg|jpeg)$' -print -exec cp {} ~/salvar/fotos \; 2> error_log > log
find /media -regextype posix-egrep -regex '.*\.(doc|xls|pdf|rar|zip)$' -print -exec cp {} ~/salvar/documentos \; 2>> error_log >> log
find /media -regextype posix-egrep -regex '.*\.(avi|mpg|mpeg|mp4|wmv|wma|mov)$' -print -exec cp {} ~/salvar/videos \; 2>> error_log >> log
find /media -regextype posix-egrep -regex '.*\.mp3$' -print -exec cp {} ~/salvar/musica \; 2>> error_log >> log

Saludos.

+1
0
-1
Imagen de nacho tineo
+1
0
-1

Muchas gracias compañero dado que tenia un problema que paso a exponer.
En relación a las fotos todos solemos usar una cámara digital y esta nombra a los archivos ejem:
IMG_001 , IMG_002 .....
Las pasamos al ordenador y las guardamos en un directorio las borramos de la cámara y ya esta lista para el siguiente día.
Pero las nuevas fotos las nombra otra vez IMG_001 ,IMG_002 las guardamos de nuevo en el ordenador esta vez claro esta en otro directorio y eh hay mi problema.
Tengo dos directorios con archivos de mismo nombre pero que son diferentes y mi pequeño script se para y me pregunta si quiero sobrescribir le digo que no y continua su trabajo pero claro esta me deja sin copiar archivos.
Saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de nacho tineo
+1
0
-1

Gracias kikerap pero me surge un problema con los archivos que se llaman = y están en diferentes directorios simplemente los sobrescribe , también deja sin copiar los archivos que en la extensión este en mayúsculas .JPG .
Saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de KIKERAP
+1
0
-1

Ah si, me falto añadir al cp los parametros que tenias para que no te sobreescriba. Para extensiones en mayuscula vete añadiendolas segun veas (png|PNG|..., etc.
Para lo de los archivos iguales, quiza sea conveniente crear un script que te los renombre añadiendo algun número para identificarlos y que no sean como los otros.

+1
0
-1
Imagen de nacho tineo
+1
0
-1

Muy buenas compañero ayer fue el día de probar el script ,que funciono de vicio lo único que todavía no doy con la solución de los archivos con el mismo nombre.Alguna solución para que bien los renombre o simplemente los copie a otro directorio.
Que decir que la copia de 30gb no me llevo ni 15 minutos.Y lo bien que queda ver el proceso en la terminal.
saludos

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de Alcruz
+1
0
-1

No se, te sugiero probar en usar rsync en vez de cp, es un comando que tre mas apciones

+1
0
-1
Imagen de nacho tineo
+1
0
-1

Muchas gracias es increíble la cantidad de cosas que se puede hacer con este comando.
En cuanto tenga un rato me pongo con el haber que saco.
saludos.

+1
0
-1

La libertad es aquella facultad que aumenta la utilidad de todas las demás facultades.
(Immanuel Kant)

Imagen de Alcruz
+1
0
-1

Esto se resuelve ejecutando el siguiente script


#!/bin/bash

IFS=$'\x0A'$'\x0D'

ORIGEN=$1
EXT=$2
DEST=$3
for i in `find $ORIGEN -iname "*$EXT"`; do

if [ -f $DEST/`basename $i` ] ; then
echo "renombrando $i"
cp $i $DEST/`basename $i $EXT`_copia_$(date|awk '{print $4}'|sed 's/://g')$EXT && echo "copiado $i" >> registro.log
else
cp $i $DEST && echo "copiado $i" >> registro.log
fi
done

Para ejecutarlo se abre terminal y se pone bash ruta al script carpeta origen extensión incluyendo el punto y finalmente la ruta a la carpeta destino con todo esto puesto eb la terminal se pulsa Enter y ya.
Básicamente lo que hace es renombrar en la carpeta destino todos aquellos archivos de nombres repetidos, de esa manera no se eliminan o sobreescriben.
Lo que queda ahora es crear un script para que invoque al script anterior para cada situación, sería algo así
#!/bin/bash
bash ruta script ruta_directorio_origen 1 extensión1 ruta_directio_destino1
bash ruta script ruta_directorio_origen 2 extensión2 ruta_directio_destino2
y así con los otros

+1
0
-1