Encontre arquivos do número da semana ISO

Encontre arquivos do número da semana ISO

Gostaria de encontrar arquivos criados no número da semana ISO do ano. Esses dois valores serão fornecidos pelo usuário como argumentos.

Por exemplo, o usuário fornece os dois valores:

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

E o script está executando o findcomando que lista os arquivos entre 02/03/2020 e 08/03/2020

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

Existe uma maneira simples de fazer isso ( findargumento opcional ou algo parecido)?

Responder1

Não é simples, mas desde que você tenha uma ferramenta como o GNU datepara gerenciar a aritmética de datas, é bem possível.

#!/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" "$@"

O uso típico poderia ser assim

./iso-year-week.sh 2020 04

informação relacionada