我有一個包含絕對路徑的檔案(file.txt)
cat file.txt
#檔案名中有空格字符
/home/user/aws/doc/my doc 1.pdf
/home/user/aws/doc/my doc 2.pdf
IFS=''
for FILE in $(cat "${file.txt}"); do
echo "${FILE}"
/usr/local/bin/aws s3 cp ${FILE} "${S3Path_Bucket}PDF_FOLDER/"
done
exit 0
當我運行腳本時,出現以下錯誤
用戶提供的路徑
/home/user/aws/doc/my doc 1.pdf
/home/user/aws/doc/my doc 2.pdf 不存在。
我嘗試將轉義字符放在 file.txt
/home/user/aws/doc/my\ doc\ 1.pdf
/home/user/aws/doc/my\ doc\ 1.pdf
我犯了同樣的錯誤
用戶提供的路徑
/home/user/aws/doc/my\ doc\ 1.pdf
/home/user/aws/doc/my\ doc\ 2.pdf 不存在。
我的 file.txt 非常大,我試圖弄清楚如何通過轉義空格和回圈來復制這些檔案。
謝謝!
uj5u.com熱心網友回復:
您不會逃避空白,而是正確參考變數。有關更多資訊,請參閱https://mywiki.wooledge.org/Quotes并將您的代碼復制/粘貼到http://shellcheck.net ,因為您使用的bash標簽已經告訴您這樣做,然后修復它告訴您的問題。另請參閱https://mywiki.wooledge.org/DontReadLinesWithFor和correct-bash-and-shell-script-variable-capitalization。
試試這個:
< file.txt xargs -I {} /usr/local/bin/aws s3 cp -- "{}" "${S3Path_Bucket}PDF_FOLDER/"
或者如果您真的想使用回圈,那么:
while IFS= read -r file; do
/usr/local/bin/aws s3 cp -- "$file" "${S3Path_Bucket}PDF_FOLDER/"
done < file.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410604.html
標籤:
下一篇:如何洗掉名為“.”的檔案?
