scp shell脚本中2个日期之间的模式filename_date的所有日志文件

时间:2016-08-31 11:36:32

标签: linux server sh scp

我的日志文件格式为upd_yyyymmdd_slr.stats。我想在两个日期之间将所有文件从服务器复制到本地服务器,例如。

我希望所有日志在日志文件中的文件为20151228,而20160103表示我想从一组许多文件中复制以下文件。

upd_20151228_slr.stats
upd_20151229_slr.stats
upd_20151230_slr.stats
upd_20151231_slr.stats
upd_20160101_slr.stats
upd_20160102_slr.stats
upd_20160103_slr.stats

我正在使用以下命令,但它无效

 scp server:/reports/logs/upd_20[15-16][12-01][29-03]*slr* ./log_files

请找到我在Linux和shell脚本中可以做的最好方法

1 个答案:

答案 0 :(得分:0)

Check out this script:

#!/bin/bash

for i in `ls upd_*_slr.stats`; do 
  # First strip off prefix and suffix strings.
  s=`echo $i | sed 's/upd_//g' | sed 's/_slr.stats//g'`
  if [[ $s -ge 20151230 && $s -le 20160102 ]]; then # Modify dates as needed 
    echo $i
    cp $i /path/to/dest/dir
  fi
done

EDIT:

In case of a remote server one could try this:

#!/bin/bash

for i in `ssh username@remoteaddress ls /path/to/dir/upd_*_slr.stats`; do 
  i=${i##*/}
  # First strip off extra strings leaving only date.
  s=`echo $i | sed 's/upd_//g' | sed 's/_slr.stats//g'`
  if [[ $s -ge 20151230 && $s -le 20160102 ]]; then # Modify dates as needed 
    echo $i
    scp username@remoteaddress:/path/to/dir/$i /path/to/dest/dir
  fi
done