¿Línea de comando cp o rsync para rastrear la unidad buscando solo tipos de archivos específicos y colocarlos en algún lugar?

¿Línea de comando cp o rsync para rastrear la unidad buscando solo tipos de archivos específicos y colocarlos en algún lugar?

¿Es posible utilizar únicamente la línea de comando para usar algo como el comando cpo rsyncpara rastrear un disco duro buscando solo archivos de imagen/video? ¿Y tal vez en el proceso de copiarlos a otra ubicación conservando los nombres/rutas de las carpetas en la nueva ubicación?

Tengo un par de discos duros viejos y quiero hacer copias de seguridad de las fotos y videos que tengo en ellos, pero, en el mejor de los casos, están dispersos en miles de carpetas y preferiría que la computadora hiciera la mayor parte del trabajo duro por mí, si es posible. Todo lo posible, pero todavía estoy aprendiendo sobre la línea de comando y sus impresionantes habilidades.

Respuesta1

Puede utilizar findpara buscar archivos que le interesen, es decir:

find /mnt/hd1 -name \*.jpg

Buscará archivos jpg (bueno, archivos con extensión .jpg) en el directorio /mnt/hd1. Si desea simplemente copiar esos archivos en algún lugar, puede:

find /mnt/hd1 -name \*.jpg -exec cp {} /mnt/dest

Esto ejecutará cpel comando para cada archivo que pueda encontrar en el directorio /mnt/dest.

Espero eso ayude :)

Respuesta2

Otra posibilidad, si no desea automatizarlo en un solo script, es usar el comando de búsqueda para crear un script bash. Luego ejecute el script bash. De esta manera también podrás saber el origen del archivo.

Además, cambiaría ligeramente lo anterior en caso de que tenga nombres de archivos duplicados si sospecha esto en su entorno. Necesitaría alguna verificación de errores en su secuencia de comandos.

¿También desea conservar la ruta del directorio?

es decir, si hay un archivo aquí

/fuente/a/b/c/d/e.jpg

¿Quieres copiarlo a

/dest/a/b/c/d/e.jpg ?

o

/dest/e.jpg ?

Entonces un ejemplo podría ser

find /source -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/}' > copy.sh

Esto se copiaría solo en un directorio/copia de seguridad.

Para preservar, podrías hacer

(cd /source; find . -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/"$1}') > copy.sh

Pero entonces querrás crear todos los directorios primero.

(cd /source; find . -type d -print | awk '{print "mkdir -p /backup/"$1}' > mkdir.sh

El poder de hacer esto es que también puedes observar los scripts y asegurarte de que todo se vea bien antes de ejecutar los comandos. Me he quemado varias veces ejecutando el comando con...erm...resultados inesperados :)

Además, tener el guión también te da un registro de lo que harás.

información relacionada