2016-05-31 12 views
0

Ich versuche, den Dateinamen aus einer TXT-Datei zu lesen und Dateien auf einem FTP-Server von einem Ordner in einen anderen zu verschieben. Ich habe den folgenden BefehlLinux lftp mv Befehl mit Variable

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 

Allerdings ist die $ {$ line} Variable nicht mit den Werten und der FTP-Server zeigt

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

würde geschätzt Jeder Zeiger ersetzt. (Ich bin auf Centos 6.5, wenn das hilft).

+0

Sie haben den gesamten Befehl in einfache Anführungszeichen eingeschlossen, und Variablen werden nicht innerhalb einzelner Anführungszeichenfolgen erweitert. Wenn Sie einfach die einfachen und doppelten Anführungszeichen im 'lftp'-Befehl umkehren, wird es wahrscheinlich funktionieren –

Antwort

1

Sie haben den gesamten Befehl single quoted, was die Erweiterung der bash-Parameter innerhalb verhindert. Sie können diesen Teil beheben, indem Sie die einfachen und doppelten Anführungszeichen Umkehren wie so:

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 

Vorausgesetzt, dass Sie keine Dateien mit Zeilenumbrüchen oder einfache Anführungszeichen haben dies funktionieren sollte ich erwarten.

Zum Schutz vor Sonderzeichen helfen Sie printf statt nur erweitern direkt an Ort und Stelle, wie verwenden:

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 

da können wir notierten/Escape-Sequenzen zu drucken, die verwendet werden können, in der Verwendung printf mit %q Nächste Befehlsebene

+0

Das hat es behoben. Vielen Dank! – everisk