Scripting
如何使用 sftp 放置多個文件
在將多個文件放入伺服器時需要您的幫助。我創建了一個腳本,但它沒有放置所有文件
cd /buffer/miscellaneous/new/ cd $(ls -t | head -n 1) latest=$(find -mmin -60 | cut -d'/' -f2 | tail -n +2 | tr '\n' '\t') /usr/local/bin/sshpass -p password sftp -oBatchMode=no adris@XX.XXX.XXX.XX:/folder1 << 1 mput $latest* bye
對於這個命令
find -mmin -60 | cut -d'/' -f2 | tail -n +2 | tr '\n' '\t'
輸出是 2 個 csv 文件:
cgi_20111210_235524.csv cgi_20203127_125504.csv
現在的問題是
mput
只放置第一個文件而不放置其他文件。find命令的輸出如下
find -mmin -60 . ./cgi_20110911_135504.csv ./cgi_20111210_235524.csv ./cgi_20203127_125504.csv
通過添加只查找文件而不是目錄,可以省略在輸出
cut -d'/' -f2
中跳過該行的命令。.``find``-type f
cut -d'/' -f2
如果子目錄中有文件,該命令將不會產生文件名,sftp
在這種情況下該命令也不起作用。所以我建議限制find
.我建議
sftp
從列印的文件名中創建單獨的命令,並將其通過find
管道傳輸到您的sftp
命令中。{ find -maxdepth 1 -type f -mmin -60| cut -d'/' -f2 | sed 's/^/put /' ; echo bye ; } | /usr/local/bin/sshpass -p password sftp -oBatchMode=no adris@XX.XXX.XXX.XX:/folder1
要查看為
sftp
您創建了哪些命令,可以省略| /usr/local/bin/sshpass
…編輯
要記錄文件名,您可以在or命令
tee logfile
之後插入類似的內容到管道中。如果要附加到現有日誌文件而不是覆蓋它,請使用find``cut``tee -a logfile
例子:
{ find -maxdepth 1 -type f -mmin -60 | cut -d'/' -f2 | tee logfile | sed 's/^/put /' ; echo bye ; } | /usr/local/bin/sshpass -p password sftp -oBatchMode=no adris@XX.XXX.XXX.XX:/folder1