在我的腳本中試圖讓 find 的輸出位于 here-string 中,但我不斷得到“put {}”和明顯的“{}:沒有這樣的檔案或目錄”
find "$SOURCE_DIR" -type f -name "*.txt" -exec sshpass -p "$PASSWORD" sftp -oPort=$PORT $USER@$HOST:$HOST_DIR <<< $'put' {} 2>&1 \;
如何將檔案名傳遞到 here-string 以便 sftp 放置檔案?
我在腳本中的前一行是我沒有問題的。但是,我不能再在此腳本中使用 curl。
find "$SOURCE_DIR" -type f -name "*.txt" -exec curl -T {} sftp://$USER:$PASSWORD@$HOST:$PORT$HOST_DIR 2>&1 \;
uj5u.com熱心網友回復:
find -exec不會隱式啟動 shell,因此它不會運行 shell 操作或重定向。
您可以讓它啟動一個 shell(這在Using Find的Complex Actions部分進行了討論),但是撰寫一個以 NUL 分隔的檔案名串列并將它們讀入您的 shell 同樣容易:
while IFS= read -r -d '' file <&3; do
sshpass -p "$PASSWORD" sftp -oPort="$PORT" "$USER@$HOST:$HOST_DIR" <<<"put $file"
done 3< <(find "$SOURCE_DIR" -type f -name "*.txt" -print0)
作為額外的優化,考慮只運行sftp 一次,而不是每個檔案一次(注意這是使用 GNU-printf擴展名find):
find "$SOURCE_DIR" -type f -name "*.txt" -printf 'put %p\n' |
sshpass -p "$PASSWORD" sftp -oPort="$PORT" "$USER@$HOST:$HOST_DIR"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/537291.html
標籤:狂欢传输协议
