我需要一个bash脚本来获取当前日期的文件名,例如ex-20171104.1
答案 0 :(得分:1)
据我所知,你有一个zip文件 abc.zip ,你想从中提取最新的文件。如果我错了,请发表评论,我会相应地对其进行排序,如果我没有错,这个脚本将对你有用:
a="$(date -d $(date -I) +%Y%m%d)"
b="$(unzip -l abc.zip)"
c="$(echo "$b" | grep "$a")"
unzip -j abc.zip $c 2> /dev/null
在这个脚本中,首先我们将当前日期格式化为YYYYMMDD而不使用破折号或斜杠。然后我们列出其中的内容,通过正则表达式,我们匹配文件的修改日期,如果它匹配我们当前的日期,它将为我们抛出文件。要获取文件名,这是字符串输出的最后一个单词,我们使用 awk ,最后解压缩我们想要的文件而不是其中的所有文件。
答案 1 :(得分:0)
简单的一行
unzip -j abc.zip $(unzip -l abc.zip | grep -o "$(date +%Y%m%d).*")
示例输出
$ unzip -l abc.zip
Archive: abc.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-11-06 11:10 20171102.1
0 2017-11-06 11:10 20171104.3
0 2017-11-06 11:09 20171106.1
0 2017-11-06 11:10 20171106.2
--------- -------
0 4 files
$ unzip -j abc.zip $(unzip -l abc.zip | grep -o "$(date +%Y%m%d).*")
Archive: abc.zip
extracting: 20171106.1
extracting: 20171106.2
$