2016-08-31 2 views
0

ログファイルの形式はupd_yyyymmdd_slr.statsです。たとえば、2つの日付の間にサーバーからローカルサーバーにすべてのファイルをコピーしたいとします。scpシェルスクリプトの2つの日付の間のパターンfilename_dateのすべてのログファイル

ログファイルに日付を持つすべてのファイルを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上でこれを

答えて

0

チェックアウトできる最善の方法を見つけるしてくださいスクリプト:

#!/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:

リモートサーバの場合、1はこれを試みることができる:私は同じ上からファイルをコピーしたい場合

#!/bin/bash 

for i in `ssh [email protected] 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 [email protected]:/path/to/dir/$i /path/to/dest/dir 
    fi 
done 
+0

こんにちはottoshmidtこのよう勧めてくださいが動作します私は1つのサーバーから別のサーバーにコピーしたいと思っています。私はabc.x.comからログインしています。私はqwe.x.comからコピーしたいと思います。 –

+0

は5つのファイルを作成し、このコードをエラーが発生するのと同じように実行しますwenこのコードのみを実行します - > shellt.sh:6:shellt.sh:[[:not found] shellt.sh:6:shellt.sh:[[見つからない shellt.sh:6:shellt.sh:[[:見つからない] shellt.sh:6:shellt.sh:[[:見つからない] shellt.sh:6:shellt.sh:[[:見つからない shellt.sh:6:shellt.sh:[[:not found] –

+0

シェル(sh)で実行すると実行されないbashスクリプトです。また、[[と]]括弧の前後にスペースがあることを確認してください。 – ottoshmidt

関連する問題