mv arquivo / pasta com espaços em branco em seu nome não funciona - LFTP

3

Eu tenho 2 espaços:
Meu NAS Synology . E meu FTP .

Se assumirmos que alguns arquivos no meu NAS local também estão no meu repositório FTP, eu quero mover alguns arquivos no meu NAS local e no meu FTP em pastas diferentes.

por exemplo: Depois de baixar arquivos do FTP para o NAS
NAS:
 - Mover de / volume1 / Downloading / file001 para / volume1 / Downloaded / file001

FTP:
- Mover de / downloads / file001 para / downloads / Finished / file001

Todos os arquivos no NAS são movidos no caminho certo: OK
No meu FTP, apenas arquivos / pastas que não contêm espaços em branco são movidos: KO

Então aqui está uma parte do script que precisamos saber:

#!/bin/sh
# Inits
ficLog=/volume1/ScriptsAndOutputs/logFTPSeedibox.txt
downloadingFolderPath=/volume1/Downloading
downloadedFolderPath=/volume1/Downloaded
ftpDestinationPath=FinishedTmp

# Configuration : ftp / user / pass
servFTP=server
userFTP=user
passFTP=password

for filePath in "${downloadingFolderPath}"/* ; do

    # As filePath is the complete path of the file we need to get the file NAME
    fileName='basename "${filePath}"'
    #Try to move it on FTP
    lftp ftp://${userFTP}:${passFTP}@${servFTP} -e 'set ssl:verify-certificate false;set file:charset utf8;set ftp:charset utf8;cd downloads;mv "${fileName}" "${ftpDestinationPath}"'
    res2=$?

    #Then we move file on the NAS
    mv "${filePath}" "${downloadedFolderPath}"
done
exit 0

Aqui está a saída:

+ ficLog=/volume1/ScriptsAndOutputs/logFTPSeedibox.txt
+ downloadingFolderPath=/volume1/Downloading
+ downloadedFolderPath=/volume1/Downloaded
+ ftpDestinationPath=FinishedTmp
+ servFTP=server
+ userFTP=user
+ passFTP=password
+ for filePath in '"${downloadingFolderPath}"/*'
++ basename /volume1/Downloading/@eaDir
+ fileName=@eaDir
+ lftp ftp://user:password@server -e 'set ssl:verify-certificate false;set file:charset utf8;set ftp:charset utf8;cd downloads;mv "${fileName}" "${ftpDestinationPath}"'
cd ok, cwd=/downloads           
mv ${fileName}=>${ftpDestinationPath} [Waiting for response...]
mv: Access failed: 550 RNFR command failed. (${fileName})         
+ res2=1
+ mv /volume1/Downloading/@eaDir /volume1/Downloaded
mv: inter-device move failed: ‘/volume1/Downloading/@eaDir’ to ‘/volume1/Downloaded/@eaDir’; unable to remove target: Directory not empty
+ for filePath in '"${downloadingFolderPath}"/*'
++ basename '/volume1/Downloading/Folder With Files'
+ fileName='Folder With Files'
+ lftp ftp://user:password@server -e 'set ssl:verify-certificate false;set file:charset utf8;set ftp:charset utf8;cd downloads;mv "${fileName}" "${ftpDestinationPath}"'
cd ok, cwd=/downloads           
mv ${fileName}=>${ftpDestinationPath} [Waiting for response...]
mv: Access failed: 550 RNFR command failed. (${fileName})         
+ res2=1
+ mv '/volume1/Downloading/Folder With Files' /volume1/Downloaded
+ for filePath in '"${downloadingFolderPath}"/*'
++ basename /volume1/Downloading/Test_no_spaces.txt
+ fileName=Test_no_spaces.txt
+ lftp ftp://user:password@server -e 'set ssl:verify-certificate false;set file:charset utf8;set ftp:charset utf8;cd downloads;mv "${fileName}" "${ftpDestinationPath}"'
cd ok, cwd=/downloads           
mv ${fileName}=>${ftpDestinationPath} [Waiting for response...]
mv: Access failed: 550 RNFR command failed. (${fileName})         
+ res2=1
+ mv /volume1/Downloading/Test_no_spaces.txt /volume1/Downloaded
+ for filePath in '"${downloadingFolderPath}"/*'
++ basename '/volume1/Downloading/test_under et espaces.txt'
+ fileName='test_under et espaces.txt'
+ lftp ftp://user:password@server -e 'set ssl:verify-certificate false;set file:charset utf8;set ftp:charset utf8;cd downloads;mv "${fileName}" "${ftpDestinationPath}"'
cd ok, cwd=/downloads           
mv ${fileName}=>${ftpDestinationPath} [Waiting for response...]
mv: Access failed: 550 RNFR command failed. (${fileName})         
+ res2=1
+ mv '/volume1/Downloading/test_under et espaces.txt' /volume1/Downloaded
+ exit 0

Como você pode ver, ele está funcionando para qualquer pasta / arquivo no NAS, mas apenas para nomes de arquivos / pastas sem espaços em branco no FTP.

Alguém pode me ajudar? Obrigado.

    
por JuGdx 30.11.2016 / 10:44

1 resposta

0

Esta linha:

lftp ftp://${userFTP}:${passFTP}@${servFTP} -e 'set ssl:verify-certificate false;set file:charset utf8;set ftp:charset utf8;cd downloads;mv "${fileName}" "${ftpDestinationPath}"'

O -e bit está entre aspas simples, o que significa que o shell não substituirá ${fileName} ou ${ftpDestinationPath} pelos valores dessas variáveis.

Para corrigir isso, use aspas duplas:

.... -e "set ssl:verify-certificate false;set file:charset utf8;set ftp:charset utf8;cd downloads;mv '${fileName}' '${ftpDestinationPath}'"

Se de alguma forma falhar (não posso testá-lo atualmente), use \" no lugar de cada uma das aspas simples acima.

    
por 04.09.2017 / 10:51