我们有备份存储在S3中,需要根据最近的时间戳来检索备份。我们已将文件存储在S3中,格式为YYYYMMDD_HHMM.tar.gz
20181009_0910.tar.gz
20181004_0719.tar.gz
20180925_0414.tar.gz
20180915_2210.tar.gz
鉴于时间戳为20180922_1020,我们需要使用shell脚本获取文件20180925_0414.tar.gz。
谢谢。
答案 0 :(得分:0)
使用Perl One衬垫(当然有些冗长!!)。
我了解“最近”是指两个方向之间的输入之间最短。也就是说,如果您有2个文件,Oct-1st.txt和Oct-30.txt,并且如果输入是Oct-20,则将输出Oct-30文件
$ ls -l *2018*gz
-rw-r--r-- 1 xxxx xxxx 0 Oct 17 00:04 20180915_2210.tar.gz
-rw-r--r-- 1 xxxx xxxx 0 Oct 17 00:04 20180925_0414.tar.gz
-rw-r--r-- 1 xxxx xxxx 0 Oct 17 00:04 20181004_0719.tar.gz
-rw-r--r-- 1 xxxx xxxx 0 Oct 17 00:04 20181009_0910.tar.gz
$ export input=20180922_1020
$ perl -ne 'BEGIN { @VAR=@ARGV; $in=$ENV{input}; $in=~s/_//g;foreach(@VAR) {$x=$_;s/.tar.gz//g;s/_//g;s/(\d+)/abs($1-$in)/e;$KV{$_}=$x};$res=(sort keys %KV)[0]; print "$KV{$res}"} ' 2018*gz
20180925_0414.tar.gz
$ export input=20180905_0101
$ perl -ne 'BEGIN { @VAR=@ARGV; $in=$ENV{input}; $in=~s/_//g;foreach(@VAR) {$x=$_;s/.tar.gz//g;s/_//g;s/(\d+)/abs($1-$in)/e;$KV{$_}=$x};$res=(sort keys %KV)[0]; print "$KV{$res}"} ' 2018*gz
20180915_2210.tar.gz
$
希望,这会有所帮助!