ISO 주 번호에서 파일 찾기

ISO 주 번호에서 파일 찾기

해당 연도의 ISO 주 번호에 생성된 파일을 찾고 싶습니다. 이 두 값은 사용자가 인수로 제공합니다.

예를 들어 사용자는 다음 두 가지 값을 제공합니다.

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

그리고 스크립트는 find2020-03-02와 2020-03-08 사이의 파일을 나열하는 명령을 실행하고 있습니다.

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

이를 수행하는 간단한 방법이 있습니까( find선택적 인수 또는 이와 유사한 것)?

답변1

간단하지는 않지만 날짜 산술을 관리하는 GNU와 같은 도구가 있다면 date꽤 가능합니다.

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

일반적인 사용법은 다음과 같습니다

./iso-year-week.sh 2020 04

관련 정보