2008-11-16 8 views
2

저는 보통 scp를 사용하여 물건을 복사하지만 더 강력한 rsync 명령에 익숙해졌습니다. 변경된 파일 만 복사하여 더 적은 대역폭을 사용할 수 있습니다. 그러나 rsync에는 많은 복잡한 매개 변수가 있으므로 이클립스를 쉽게 만들 수있는 작은 Bash 스크립트를 만들고 'rscp'명령을 호출한다고 생각했습니다. 그래서, 나는 이와 비슷한 것을 만들었습니다. 아래 예에서 웹 호스트는 22 이외의 다른 포트 번호를 사용하므로 $ 1이 사용됩니다.더 쉬운 rsync 명령을 만드는 중 오류가 발생했습니다.

#!/bin/bash 

rsync -avzp --progress --rsh='ssh -p$1' $2 $3 $4 $5 $6 $7 

그래서, 그것의 사용, 나는 희망, 같은 것입니다 : scp 명령의 내 사용에 조금 더 가까이 만들 것

rscp 3822 --exclude=tiny_mce /var/www/mysite/* [email protected]:~/www/mysite 

을, 당신은 참조하십시오. 내가 이것을 실행할 때

그러나, 나는이 오류를 얻을 :

building file list ... 
4 files to consider 
ERROR: destination must be a directory when copying more than 1 file 
rsync error: errors selecting input/output files, dirs (code 3) at main.c(494) [receiver=2.6.9] 
rsync: connection unexpectedly closed (8 bytes received so far) [sender] 
rsync error: error in rsync protocol data stream (code 12) at io.c(454) [sender=2.6.9] 

를하지만 일반 rsync를 명령으로 돌아 가면, 그냥 잘 작동합니다.

내 배쉬 스크립트에서 내가 뭘 잘못하고 있는지 알아낼 수 있습니까?

답변

7

/var/www/mysite/*가 셸에 의해 확장되었으므로 스크립트에서 처리하는 것보다 많은 인수가 전달됩니다.

또한 변수는 작은 따옴표로 묶이지 않으므로 큰 따옴표를 사용해야합니다. 이 시도

을 (bash는 man page 참조) : 우리는 특별하다 "$의 @"를 사용하여, 우리는 (시프트) 인수 목록 떨어져 포트를 가지고

#!/bin/bash 
PORT=$1 
shift 
rsync -avzp --progress --rsh="ssh -p$PORT" "[email protected]" 

우선, 그것은 (인수를 의미 이 경우에는 스크립트로) 변환되어 모두로 변환되지만 각각 따옴표로 묶여 있습니다. (자세한 내용은 bash man page을 참조하십시오).

0

당신은 기술적으로뿐만 아니라 기능이 점을 설정 할 수 없습니다?

rscp() { 
rsync -avzp --progress --rsh="ssh -p$PORT" "[email protected]" 
} 

그리고 당신이 그것을 실행 RSCP를 3822