Bash

從日期範圍擴展文件名

  • February 4, 2015

考慮ISO 8601格式的日期,即‘YYYY-MM-DD’eg 2015-01-28,假設我們有一個文件夾,其中包含以下形式的文件:

AAAA_<date>_BBBB

我正在尋找zsh(或 Bash)中的 glob 模式,我可以用它來指定兩個日期之間的文件。

例如,假設我想在2014-12-15和之間複製文件2015-02-03。有沒有一種簡單的方法來建構一個 glob 表達式來引用這兩個日期(包括它們)之間的文件?

以下可能會有所幫助(按字典順序):

ISO 8601 日期格式化方案中表達了對字典順序的重要利用,該方案將日期表示為 YYYY-MM-DD。這種日期排序有助於對日期進行直接的電腦化排序,這樣排序算法不需要將日期字元串的數字部分與非數字字元的字元串區別對待,並且日期將按時間順序排序。

用 標記問題很好zsh,因為在該 shell 中,您可以使用廣泛的glob 限定符,包括對文件名進行的測試:

$ ls -1 AAAA*
AAAA_2012-10-03_BBBB
AAAA_2014-12-28_BBBB
AAAA_2015-01-03_BBBB
AAAA_2015-02-03_BBBB
AAAA_2015-10-03_BBBB

$ d1='2014-12-15'
$ d2='2015-02-03'
$ print -l *(e:'[[ "${${REPLY#*_}%_*}" > "$d1" && "${${REPLY#*_}%_*}" < "$d2" ]]':)
AAAA_2014-12-28_BBBB
AAAA_2015-01-03_BBBB

請注意,對於給定的日期格式,您可以執行簡單的字元串比較。

我在這裡假設您的文件AAAA_date_BBBB在問題中被命名,並通過參數擴展提取了“日期”部分。您可能需要修改此程式碼,以便以適合您實際情況的方式獲取“日期”。

引用自:https://unix.stackexchange.com/questions/182783