2012-01-21 3 views
0

CentOS 6을 실행 중입니다.CentOS의 Cronjob에서 scp를 통해 파일을 업로드하고 성공시 삭제

매시간 다른 서버에 파일을 업로드해야합니다.

서버에 대한 암호가있는 SSH 액세스 권한이 있습니다. 그러나 ssh 키 등은 옵션이 아닙니다.

누구든지 scp를 통해 파일을 업로드하고 성공적으로 업로드 한 후 원본을 삭제하는 .sh 스크립트로 나를 도와 줄 수 있습니까?

답변

1

훨씬 더 강력하기 때문에 scp보다는 rsync를 사용하는 것이 좋습니다. 실행 가능한 스크립트에 다음을 입력하십시오. 여기서는 모든 파일 (및 그 이상)이 local_dir /이 가리키는 디렉토리에 있다고 가정합니다.

 
-a, --archive    Archive mode 
-z, --compress    Compress file data during the transfer 
-r, --recursive    recurse into directories 
-p, --perms     Preserve permissions 
    --progress    Show progress during transfer 
    --password-file=FILE Get password from FILE 
    
            
 
  
             --delete-after   Receiver deletes after transfer, not during
            
  

편집 :

#!/bin/env bash 
rsync -azrp --progress --password-file=path_to_file_with_password \ 
local_dir/ [email protected]_host:/absolute_path_to_remote_dir/ 
if [ $? -ne 0 ] ; then 
echo "Something went wrong: don't delete local files." 
else 
rm -r local_dir/ 
fi 

옵션은 (예를 들어, http://ss64.com/bash/rsync.html 자세한 정보를 원하시면)은 다음과 같습니다 제거 --delete-후, 즉 영업의 의도하지 이후

암호가 포함 된 파일에 대한 사용 권한을 설정할 때주의하십시오. 이상적으로 당신이 파일에 접근 할 수 있어야합니다.

평상시처럼, 익숙해지기 위해 rsync로 약간 연주하는 것이 좋습니다. 로컬 파일을 삭제하기 전에 rsync ($?를 사용)의 반환 값을 확인하는 것이 가장 좋습니다. rsync에 대한

더 많은 정보 : http://linux.about.com/library/cmd/blcmdl1_rsync.htm

+0

내가는 업로드 할 수 없습니다 삭제해서는 안 디렉토리에 어떤 파일을 가지고있다. 그게 가능하니? – user809829

+0

rsync가 로컬 폴더에 존재하지 않는 원격 폴더의 모든 파일을 삭제한다는 사실을 알게되었습니다. 안좋다. scp가이 문제에 대해 더 나을 것이라고 생각합니까? – user809829

+0

@ user809829 : 네, 그게 --delete-after의 목적입니다. 해당 옵션을 제거 할 수 있으며 파일을 삭제하지 않습니다. 후자가 더 강력하기 때문에 rsync를 통해 scp를 사용할 이유가 없습니다. rdync가 수행 할 작업 만 표시하는 --dry-run 옵션을 사용하여 rsync가 수행하는 작업을 시험해 볼 수도 있습니다. 모든 경우에서와 마찬가지로, man 페이지를 읽어야하며 _a lot_ 정보를 포함해야합니다. – Karolos

관련 문제