2016-08-31 5 views
0

로그 파일의 형식은 upd_yyyymmdd_slr.stats입니다. 예를 들어, 두 날짜 사이에 서버의 모든 파일을 로컬 서버에 복사하려고합니다.scp 쉘 스크립트의 두 날짜 사이의 패턴 filename_date의 모든 로그 파일

로그 파일에 날짜가있는 모든 파일을 2015122820160103으로 지정하면 여러 파일 집합에서 아래 파일을 복사하려고합니다.

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 

작동하지 않습니다 내게 쉘 스크립트뿐만 아니라 리눅스에서이

답변

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 
,691,363 (210)

편집 :

원격 서버의 경우 하나이 시도 할 수 : 난 같은에서 파일을 복사 싶다면

#!/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 개의 파일을 만들고이 코드를 오류 발생으로 실행합니다.이 코드 만 실행하십시오. -> 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 : [[: 찾을 수 없습니다. shellt.sh : 6 : shellt.sh : [[: 찾을 수 없음] –

+0

쉘 (sh)로 실행하면 bash 스크립트가 실행되지 않을 수 있습니다. 또한 [[및]] 대괄호 앞뒤에 공백이 있는지 확인하십시오. – ottoshmidt