2012-01-21 66 views

回答

1

爲此,我建議使用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的

的更多信息:http://linux.about.com/library/cmd/blcmdl1_rsync.htm

+0

我在目錄中有一些文件,不應該被上傳並不會被刪除。那可能嗎? – user809829

+0

剛剛發現,rsync刪除了我的遠程文件夾中的所有文件,該文件不存在於本地文件夾中。不好。我認爲scp會對這個問題更好呢? – user809829

+0

@ user809829:是的,這就是--delete-after的目的。您可以刪除該選項並且不會刪除這些文件。沒有理由在scync上使用scp,因爲後者更強大。您還可以嘗試使用--dry-run選項執行的rsync操作,該選項僅顯示將執行的操作。就像在任何情況下一樣,你應該閱讀手冊頁,它們包含許多信息。 – Karolos