이름에 공백이 있는 mv 파일/폴더가 작동하지 않음 - LFTP

이름에 공백이 있는 mv 파일/폴더가 작동하지 않음 - LFTP

공백이 2개 있습니다:
내 것시놀로지 NAS. 그리고 내파일 전송 프로토콜.

로컬 NAS의 일부 파일이 내 FTP 저장소에도 있다고 가정하면 로컬 NAS와 FTP의 일부 파일을 다른 폴더로 이동하고 싶습니다.

예를 들어:FTP에서 NAS로 파일을 다운로드한 후
네트워크 스토리지:
-이동하다/volume1/Downloading/file001에서 /volume1/Downloaded/file001로

FTP:
-이동하다/downloads/file001에서 /downloads/Finished/file001로

NAS의 모든 파일이 올바른 경로로 이동됩니다.좋아요
내 FTP에서 공백이 포함되지 않은 파일/폴더만 이동합니다.KO

이것은 우리가 알아야 할 스크립트 부분입니다.

#!/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

출력은 다음과 같습니다.

+ 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

보시다시피, NAS의 모든 폴더/파일에 대해 작동하지만 FTP에서는 공백이 없는 파일/폴더 이름에만 작동합니다.

누구든지 나를 도와줄 수 있나요? 감사해요.

답변1

이 줄은:

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

-e비트는 작은따옴표로 묶여 있습니다. 이는 쉘이 ${fileName}이러한 변수의 값을 대체하지 않음을 의미합니다.${ftpDestinationPath}

이 문제를 해결하려면 큰따옴표를 사용하십시오.

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

어떻게든 실패하면(현재는 테스트할 수 없음) \"위의 각 작은따옴표를 대신 사용하세요.

관련 정보