Buscar archivos del número de semana ISO

Buscar archivos del número de semana ISO

Me gustaría encontrar archivos creados en el número de semana ISO del año. El usuario proporcionará esos dos valores como argumentos.

Por ejemplo, el usuario proporciona los dos valores:

Please specify the year: 2020 
Please specify the ISO week number: 10

Y el script ejecuta el findcomando que enumera los archivos entre 2020-03-02 y 2020-03-08.

find . -type f -newermt 2020-03-02 ! -newermt 2020-03-08

¿Existe una forma sencilla de hacerlo ( findargumento opcional o algo como esto)?

Respuesta1

No es sencillo, pero siempre que tengas una herramienta como GNU datepara gestionar la aritmética de fechas, es bastante posible.

#!/bin/bash
#
# Find the date range for an ISO year and week number
#######################################################################

isoYear=$1
isoWeek=$2
shift 2
[[ $# -gt 0 ]] && fDir=$1 && shift           # Starting directory (optional)

firstJan="1 Jan $isoYear"

fjDoW=$(date --date "$firstJan" +%u)         # Day of week for 1st January

fjThu=$(date --date "$firstJan" +%F)         # Week number for Thursday that week
[[ $fjDoW -ne 4 ]] && fjThu=$(date --date "$firstJan -$fjDoW days +4 days" +%F)

fjMon=$(date --date "$fjThu -3 days" +%F)    # Start of ISO week
fjSun=$(date --date "$fjThu +3 days" +%F)    # End of ISO week

echo "Searching ${fDir-.} for files in the range $fjMon .. $fjSun inclusive" >&2
find "${fDir-.}" -newermt "$(date --date "$fjMon -1 day" +%F)" \! -newermt "$fjSun" "$@"

El uso típico podría ser así

./iso-year-week.sh 2020 04

información relacionada