[英]Linux lftp mv command with variable
我正在嘗試從txt文件讀取文件名,並將FTP服務器中的文件從一個文件夾移動到另一個文件夾。 我有以下命令
grep '.rar' /home/xxxxx/public_html/xxxx/download.txt | while read -r line ; do lftp -e 'set net:timeout 20; mv "Folder Name/${line}" "Folder Name/tmp/${OUTPUT}"; bye' -u username,password ftps://11.11.11.11:990 ; done
但是,$ {$ line}變量未替換為值,並且FTP服務器正在顯示
file/directory not found (Folder Name/${line})
任何指針將不勝感激。 (如果有幫助,我使用Centos 6.5)。
您將整個命令用單引號引起來,這可以防止bash參數在其中擴展。 您可以通過反轉單引號和雙引號來修復該部分,如下所示:
grep '.rar' /home/xxxxx/public_html/xxxx/download.txt | while read -r line ; do lftp -e "set net:timeout 20; mv 'Folder Name/${line}' 'Folder Name/tmp/${OUTPUT}'; bye" -u username,password ftps://11.11.11.11:990 ; done
假設您沒有帶換行符或單引號的文件,則應該可以正常工作。
為了幫助防止特殊字符,您可以使用printf
而不是像下面這樣直接擴展:
grep '.rar' /home/xxxxx/public_html/xxxx/download.txt | while read -r line ; do lftp -e "set net:timeout 20; mv '$(printf 'Folder Name/%q' "${line}")' '$(printf 'Folder Name/tmp/%q' "${OUTPUT}")'; bye" -u username,password ftps://11.11.11.11:990 ; done
因為我們可以將printf
與%q
一起使用以打印帶引號/轉義的字符串,該字符串可以在命令的下一層使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.