Scripting

如何使用 sftp 放置多個文件

  • May 19, 2020

在將多個文件放入伺服器時需要您的幫助。我創建了一個腳本,但它沒有放置所有文件

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

引用自:https://unix.stackexchange.com/questions/564519