私はCentOS 6を実行しています。CentOSのCronjobでscpでファイルをアップロードし、成功したら削除する
毎時いくつかのファイルを別のサーバにアップロードする必要があります。
私はサーバーにパスワードでSSHアクセスできます。しかし、sshキーなどはオプションではありません。
誰でも、scp経由でファイルをアップロードし、正常にアップロードした後に元のファイルを削除する.shスクリプトを教えてもらえますか?
私はCentOS 6を実行しています。CentOSのCronjobでscpでファイルをアップロードし、成功したら削除する
毎時いくつかのファイルを別のサーバにアップロードする必要があります。
私はサーバーにパスワードでSSHアクセスできます。しかし、sshキーなどはオプションではありません。
誰でも、scp経由でファイルをアップロードし、正常にアップロードした後に元のファイルを削除する.shスクリプトを教えてもらえますか?
このため、私ははるかに強力なので、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の程度
私がアップロードされていないため、削除べきではないディレクトリにあるいくつかのファイルを、持っています。それは可能ですか? – user809829
rsyncがローカルフォルダに存在しないリモートフォルダ内のすべてのファイルを削除することがわかりました。良くない。私はscpがこの問題に対してより良いと思いますか? – user809829
@ user809829:はい、それは--delete-afterの目的です。そのオプションを削除することはできますが、ファイルは削除されません。後者がより強力であるため、rsyncよりもscpを使用する理由はありません。 rdyncが--dry-runオプションを使用して何を実行しているかを実験することもできます。このオプションは実行する操作のみを表示します。あらゆる場合と同様に、あなたはmanページを読むべきです、それらは_a lot_の情報を含んでいます。 – Karolos