Script en bash: buscar archivos repetidos y moverlos a un determinado directorio

por | 22 febrero, 2015

bash-scriptEn ocasiones nuestro sistema cuenta con respaldos duplicados, manteniendo almacenada la misma información ocupando espacio innecesariamente en nuestro ordenador con multitud de archivos repetidos de todo tipo (fotos, documentos, videos…), que nos pueden llevar toda una vida organizar.

Ahora con tan solo unas pocas lineas de código, podemos realizar ese trabajo rápidamente, adaptándolo a nuestras necesidades, pudiendo modificar los parámetros para realizar la búsqueda con un filtro definido y moverlos al directorio que deseemos, y después realizar el mantenimiento planificado de backup que se requiera.

El registro de los archivos que se mueven, quedan en una bitácora que se guarda en un archivo creado en el mismo directorio donde se encuentra el script original. A ese registro con las operaciones realizadas le llamaremos directorios.dat

Explicado linea a linea, podemos ir entendiendo como funciona:

#!/bin/bash

j=0 #Contador, que te permite mantener un identificador de nombre único, para el archivo a mover

for i in $(find /home -type f -name "Nombre_Archivo_Buscar"); #Buscar todos los archivos recursivamente teniendo como origen para este ejemplo la carpeta /home

do

let j=j+1 #Incrementando el contador para el "ID" del nombre del archivo.

mv $i /ruta/destino/carpeta/Nombre_Archivo_Buscar$"_"$j -v >> directorios.dat;

# Movemos el archivo $i a la ruta /ruta/destino/carpeta/
# El archivo original es pasado a la ruta de destino, armándolo con la cadena fija del nombre del archivo a buscar, concatenado con el carácter "_" mas el valor del contador utilizado para armarlo con un consecutivo.

done;

Una vez creado el script necesario que modificamos lo permisos del mismo, para permitir su ejecución.

chmod +x script

Ahora simplemente nos falta probarlo y/o adaptarlo a nuestros requerimientos. No es la barita mágica de Harry Potter, pero puede cumplir con alguna de las necesidades de mantenimiento de nuestras copias de seguridad.

./script

En la siguiente imagen podemos apreciar los pasos necesarios para implementar el script. Vamos a utilizar tmux para poderlo ver todo en una sola ventana:

ScriptLamiradadelReplicante

Y aquí tenéis el código del script, tan solo teneis que copiarlo en un editor de texto, guardarlo y seguir los pasos que comentábamos antes para personalizarlo a vuestro gusto:

#!/bin/bash
j=0
for i in $(find /home -type f -name "Nombre_Archivo_Buscar");
do
let j=j+1
mv $i /ruta/destino/carpeta/Nombre_Archivo_Buscar$"_"$j -v >> directorios.dat;
done;

Imagen | jm3 on Flickr (CC BY-SA 2.0)

8 pensamientos en “Script en bash: buscar archivos repetidos y moverlos a un determinado directorio

  1. tannhausser

    Gracias por este nuevo aporte @anger. Está genial el script y me gusta especialmente el detalle de la bitácora que guarda el registro con los cambios realizados, funciona todo muy bien.

    Eso si! le diría a los amigos lectores que si no están muy seguros como funciona, que al principio hagan pruebas con archivos sin importancia no vaya a ser que algun error al introducir las rutas se pierda alguno por el camino 😉

    Responder
  2. Andrés Álvarez

    Muy bueno!

    Le hice una GUI y mejore un poco el código.. 😀 :

    #!/bin/bash

    IN=$( yad –center –separator=» » –form –field=»Nombre del archivo» «» –field=»Buscar en»:DIR –field=»Destino»:DIR )

    filename=$( echo «$IN» | awk ‘{ print $1 }’ )
    dir=$( echo «$IN» | awk ‘{ print $2 }’ )
    destino=$( echo «$IN» | awk ‘{ print $3 }’ )

    i=0

    for file in $( find «${dir}» -type f -name «${filename}*» )
    do
    let i++
    mv «$file» «${destino}/${filename}_${i}» -v >> directorios.dat
    done

    Algo así seria, lo improvise recién.

    Responder

Responder a CarlosCancelar respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.