2016-05-31 92 views
0

我想從txt文件中讀取文件名並將FTP服務器中的文件從一個文件夾移動到另一個文件夾。我有以下命令Linux lftp mv命令與變量

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 

然而,$ {$線}變量沒有被替換的值和FTP服務器表示

file/directory not found (Folder Name/${line}) 

任何指針將不勝感激。 (如果有幫助,我在Centos 6.5上)。

+0

您將整個命令包圍在單引號中,並且變量不會在單引號字符串中擴展。如果你只是在'lftp'命令中反轉單引號和雙引號,它可能會工作 –

回答

1

你有整個命令單引號,它可以防止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打印報價/轉義字符串可以在使用下一層命令

+0

修復它。謝謝! – everisk