2016-05-31 29 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 

我々は中に使用することができます引用された/エスケープされた文字列を印刷する%qprintfを使用することができますので、次のコマンド層

+0

それを修正しました。ありがとうございました! – everisk

関連する問題