miércoles, 14 de octubre de 2020

Mover ficheros según año de creación



Cómo mover cada fichero de una carpeta a otra carpeta según el año en que fue creado.



Puede que tengamos un programa que genere ficheros cada día en un directorio determinado de un sistema Linux. Y que haga eso mismo cada día del año. Si es así, al cabo de unos años podemos acabar con miles de ficheros (o incluso cientos de miles de ficheros) en ese directorio, cosa que dificulta acciones tan básicas como listar los ficheros para ver sus nombres.

Si no queremos eliminar los ficheros antiguos, una opción es moverlos hacia directorios que correspondan con su año de creación. De este modo, podemos mover los ficheros de 2015 al directorio 2015, los de 2016 al directorio 2016, etc. es decir, tener la siguiente estructura de directorios:

/directorio /directorio/2015 /directorio/2016 /directorio/2017 /directorio/2018 ...

Una vez visto como quedará la estructura del directorio, podemos proceder a crear un script que lea la fecha de creación de cada fichero del directorio principal y lo mueva a la carpeta correspondiente a su año de creación.

Para leer los ficheros del directorio principal, podemos usar find para poder trabajar con miles de ficheros y luego usar un loop while para mover cada fichero mientras existan ficheros.

Por último, he especificado un año en la variable "year", por si queremos dejar los ficheros de un año concreto en el directorio principal y no moverlos (los ficheros que hayan sido creados en ese año o superior no se moverán):

#!/bin/bash

orig="/origen";
dest="/destino"
year="2020";

find "$orig" -type f -print | while read -r file; do
    file_year=$(date -r "$file" "+%Y");
    if [ "$file_year" -lt "$year" ] ; then
        [ ! -d "$dest/$file_year" ] && mkdir -p "$dest/$file_year";
        mv "$file" "$dest/$file_year";
    fi
done

En cuanto a la línea:

[ ! -d "$dest/$file_year" ] && mkdir -p "$dest/$file_year";

Comprueba si existe el directorio correspondiente al año de creación del fichero que se está procesando y, si el directorio correspondiente al año no existe, lo crea.


Fuentes:

https://unix.stackexchange.com/questions/73268/how-to-move-the-files-based-on-year
https://stackoverflow.com/questions/547719/is-there-a-way-to-make-mv-create-the-directory...
0

0 comentarios:

Publicar un comentario