Соответствует ближайшему имени файла на основе отметки времени - PullRequest
0 голосов
/ 16 октября 2018

У нас есть резервные копии, сохраненные в S3, и нам нужно получить резервную копию на основе ближайшей отметки времени.У нас есть файлы, хранящиеся в S3 в формате ГГГГММДД_ЧЧММ.tar.gz

20181009_0910.tar.gz
20181004_0719.tar.gz
20180925_0414.tar.gz
20180915_2210.tar.gz

Учитывая временную метку 20180922_1020, нам нужно получить файл 20180925_0414.tar.gz с помощью сценария оболочки.

Спасибо.

1 Ответ

0 голосов
/ 16 октября 2018

Использование Perl One liner (конечно, довольно долго !!).

Я понимаю, что «ближайший» означает самый короткий между входом в любом направлении.То есть, если у вас есть 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

$

Надеюсь, этопомогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...