考虑中的日期ISO 8601格式化 ie ‘YYYY-MM-DD’
, eg 2015-01-28
,并假设我们有一个包含以下形式文件的文件夹:
AAAA_<date>_BBBB
我正在寻找一个全局模式桀骜(或 Bash),我可以用来指定之间的文件二日期。
例如,假设我想在2014-12-15
和之间复制文件2015-02-03
。有没有一种简单的方法来构建一个全局表达式来引用这两个日期(包括它们)之间的文件?
以下内容可能会有所帮助(来自字典顺序):
ISO 8601 日期格式方案中表达了字典顺序的一个重要利用,该方案将日期表示为 YYYY-MM-DD。这种日期排序有助于对日期进行简单的计算机化排序,这样排序算法不需要将日期字符串的数字部分与非数字字符字符串有任何不同地处理,并且日期将按时间顺序排序。
答案1
最好用 标记问题zsh
,因为在该 shell 中您可以使用广泛的全局限定符包括对文件名进行的测试:
$ 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
按照问题中的方式命名,并通过参数扩展提取了“日期”部分。您可能需要修改此代码,以适合您的实际案例场景的方式获取“日期”。