從 ISO 週數查找文件

從 ISO 週數查找文件

我想尋找在一年中 ISO 週數建立的檔案。這兩個值將由使用者作為參數提供。

例如使用者提供兩個值:

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

該腳本正在執行find列出 2020-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

相關內容