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 -mtime
es 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
( date
Solo puedo leer la hora de modificación. Necesitaríamos ctime
usar stat
y 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.