簡體   English   中英

帶有變量的Linux lftp mv命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM