0
我運行CentOS的6的cronjob在CentOS,通過scp上傳文件和刪除成功
我需要每小時一些文件上傳到另一臺服務器。
我有服務器的密碼SSH訪問。但ssh鍵等不是一種選擇。
任何人都可以幫助我一個.sh腳本通過scp上傳文件並在成功上傳後刪除原件嗎?
我運行CentOS的6的cronjob在CentOS,通過scp上傳文件和刪除成功
我需要每小時一些文件上傳到另一臺服務器。
我有服務器的密碼SSH訪問。但ssh鍵等不是一種選擇。
任何人都可以幫助我一個.sh腳本通過scp上傳文件並在成功上傳後刪除原件嗎?
爲此,我建議使用rsync而不是scp,因爲它更強大。只需將以下內容放入可執行腳本中即可。在這裏,我假設所有的文件(並且沒有其他)位於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的目的。您可以刪除該選項並且不會刪除這些文件。沒有理由在scync上使用scp,因爲後者更強大。您還可以嘗試使用--dry-run選項執行的rsync操作,該選項僅顯示將執行的操作。就像在任何情況下一樣,你應該閱讀手冊頁,它們包含許多信息。 – Karolos