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

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 thoughts on “Script en bash: buscar archivos repetidos y moverlos a un determinado directorio”

  1. tannhausser says:

    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 😉

    1. Anger Pulido says:

      Un honor para mi, postear en tu blog…

  2. aldobelus says:

    Simpática también la foto del principio, XD, XD, mú güeno…

  3. sdfgsdfg says:

    hola!!!!

    gracias por el script y por el tmux que no lo conocia 🙂

  4. Carlos says:

    Gracias por publicar el Scrip

  5. Andrés Álvarez says:

    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.

    1. carlosky77 says:

      eso es lo buena del SW Libre, liberas un código y existe alguien que te ayuda a mejorar.

      1. Andrés Álvarez says:

        Asi es, es una de las cosas que mas me gusta tambn. 😀

Deja un comentario