Cómo comprimir archivos según la fecha del archivo

Cómo comprimir archivos según la fecha del archivo

Tengo un mínimo de 30 archivos en un directorio que contiene fechas más antiguas, es decir, de los últimos 7 días. Ahora necesito comprimirlos según la fecha de creación/modificación del archivo.

Por ejemplo,
10 archivos con el 7 de abril: cree un zip para april7.zip
10 archivos con el 8 de abril: cree un zip para april8.zip
10 archivos con el 9 de abril: cree un zip para april9.zip

Respuesta1

Lo habitual find -mtimees un poco difícil de usar aquí, ya que solo prueba la edad en relación con el momento actual.

Con GNU date y Bash podríamos hacer algo como esto para agregar cada archivo a un archivo correspondiente a la fecha del archivo:

for f in * ; do 
    zip $(date -r "$f" +%F).zip "$f"        # 2017-04-07.zip
done

o:

for f in * ; do
    d=$(date -r "$f" +%B%d)
    zip ${d,,}.zip "$f"                     # april07.zip
done                                        # ${var,,} is for lowercase

( dateSolo puedo leer la hora de modificación. Necesitaríamos ctimeusar staty trabajar más para corregir el formato de salida).


Si, por alguna razón, necesitamos obtener una lista de todos los archivos para una fecha determinada antes de procesarlos, podríamos recopilarlos en una matriz:

files=()
date="2017-04-07"
for f in * ; do 
    [ "$(date -r "$f" +%F)" = "$date" ] && files+=("$f")
done
# do something with "${files[@]}', e.g.
# zip $date.zip "${files[@]}"

Como tal, esto solo manejaría una fecha determinada a la vez.

información relacionada