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