Bash
使用 sshpass 將文件從遠端主機傳輸到本地
我想將 40 天以前的文件從遠端傳輸到本地主機。我能夠連接遠端伺服器,但無法將文件從遠端伺服器傳輸到本地伺服器。它導致錯誤說沒有文件沒有這樣的文件或目錄,但文件存在於遠端主機上。
細節:
file=`sshpass -p "password" ssh username@server_ip "find /arch -type f -ctime -40"` sshpass -p "password" scp -r username@server_ip:$file /arch echo SCP Completed.
錯誤詳情:
cp: cannot stat ‘/arch/file1.xls’: No such file or directory
您必須處理一兩件事:
- 權限:您可能沒有讀取文件的正確權限;
- 多行答案:您的查找結果可能會給您多個文件。
長話短說,可能你的問題不是
sshpass
。從現在開始,我們理所當然地認為您沒有與權限相關的問題。
你可以做的是這樣的事情:
files="$(sshpass -p "passwd" ssh -l username rhost "find /arch -type f -ctime -40")" for file in ${files}; do if sshpass -p "passwd" scp "username@rhost:${file}" /arch; then printf "SCP Completed\n" fi done
理論上,
$files
不會包含您無法抓取的內容,因為find
將列印在stderr
您無法訪問的文件(文件夾)中,因此您應該以單獨的方式進行管理。在所有選項中,您可以在循環中合併
stderr
和stdout
添加條件,for
或者將錯誤保存在另一個 var(或文件)中並單獨循環。