2012-01-21 12 views
0

私はCentOS 6を実行しています。CentOSのCronjobでscpでファイルをアップロードし、成功したら削除する

毎時いくつかのファイルを別のサーバにアップロードする必要があります。

私はサーバーにパスワードでSSHアクセスできます。しかし、sshキーなどはオプションではありません。

誰でも、scp経由でファイルをアップロードし、正常にアップロードした後に元のファイルを削除する.shスクリプトを教えてもらえますか?

答えて

1

このため、私ははるかに強力なので、scpではなくrsyncを使用することをお勧めします。実行可能なスクリプトに次の行を入力するだけです。ここでは、すべてのファイル(とそれ以上のもの)がlocal_dir /が指すディレクトリにあると仮定します。次のように

#!/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)は次のとおりです。

 
-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
            
  

編集:--delete-を除去した後、それはOPの意図ではありませんので、

パスワードを含むファイルのアクセス許可を設定するときは注意してください。理想的には、あなただけがファイルにアクセスする必要があります。

いつものように、私はそれに精通するために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オプションを使用して何を実行しているかを実験することもできます。このオプションは実行する操作のみを表示します。あらゆる場合と同様に、あなたはmanページを読むべきです、それらは_a lot_の情報を含んでいます。 – Karolos

関連する問題