2011-03-22 12 views
0

소스에서 대상으로 파일을 복사하고 동시에 소스에서 복사 된 파일을 삭제하는 쉘 스크립트를 개발했습니다. 파일을 복사 할 수는 있지만 소스 측에서 파일을 삭제할 수 없습니다.ftp를 사용하여 파일 삭제

files='ls filename' 
for file in $files 
do 
ftp -vn $hostname <<EOFD 
    quote USER $username 
    quote PASS $password 
binary 
cd $start_dir 
rm -rf $file 
quit 
EOFD 
done 
  • 나는 또한 내가 나는 또한 SSH에 시도했지만 프롬 '잘못된 명령'
  • 같은 오류를받은 forloop 외부 FTP 놓음으로써 '을 찾을 수 없습니다 파일이나 디렉토리'
  • 로 오류가있어 사용자 이름과 암호

답변

0
files=`ls filename` 

을 넣어 역 따옴표를 들어, 명령 주위 간단하지 따옴표의 출력을 얻을 수 있습니다.

나는 또한 SSH에 시도했지만이 사용자 이름과 암호에 대한 프롬프트 - SSH-Login without password을 확인합니다.

0

ftp에 입력 스트림을 직접 스크립팅하는 FTP 명령은 일반적으로 나쁜 생각입니다. 오류 처리가 없으며 완전히 잘못 될 수 있으며 제어 할 기회가 없습니다. lftp, curl 또는 유사한 스크립트 가능 클라이언트와 같이 saner 명령 줄 클라이언트를 사용할 수있는 기회가있는 경우

또한,이

files=`ls files` 
for file in $files 

약간 더 나은 솔루션을 사용하여 파일을 반복하는 아주 좋은 생각입니다입니다 :

for file in *

하지만이 확장되지 않습니다 경우 * (또는 ls 출력) 커맨드 라인 버퍼보다 ​​더 확장 될 것이고, 실패 할 것이다. 상당히 확장 가능한 솔루션은 다음과 같습니다.

find . | while read file do 
    do_something_with $file 
done

... 아직 원하는 것은 아닙니다. 실제로 원본에서 대상으로 파일을 전송 한 다음 원본에서 파일을 삭제하려는 경우 mput 명령과 함께 lftp 명령을 사용하고 -E 옵션을 사용하여 전송 후 파일을 삭제하거나 rsync --remove-source-files과 유사한 파일을 삭제할 수 있습니다.

0

전체 방지 솔루션 :

`!rm -rf $file` 

와 라인

`rm -rf $file` 

바꾸기이 코드에서 그 자리에서 당신이 EOFD 때까지 FTP 콘솔에있는 때문입니다 문자열에 도달 했으므로 국지 시스템 (소스)에서 명령을 실행하려면 접두어로 !이 필요합니다.

테스트하는 가장 좋은 방법은 수동으로 명령을 실행하는 것입니다.여기에 내가 테스트 한 내용은 다음과 같습니다 전체 FTP는 파일의 동일한 집합을 반복하고이를 삭제 완료 후

[email protected]:~$ ftp XXX.XXX.XXX 
Connected to static-XX-XX-XX-XX.XXXXXX.com. 
220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 
220-You are user number 2 of 50 allowed. 
220-Local time is now 07:52. Server port: 21. 
220-IPv6 connections are also welcome on this server. 
220 You will be disconnected after 15 minutes of inactivity. 
Name (XXXXXX.XXX:XXX): XXXXXXX 
331 User XXXXXXX OK. Password required 
Password: 
230 OK. Current restricted directory is/
Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp> lcd test/ 
Local directory now /home/mtk4/test 
ftp> pwd 
257 "/" is your current location 
ftp> !pwd 
/home/mtk4/test 
ftp> !ls 
sample.txt 
ftp> !rm sample.txt 
ftp> !ls 
ftp> bye 
221-Goodbye. You uploaded 0 and downloaded 0 kbytes. 
221 Logout. 
[email protected]:~$ 

또는 다른 해결책,

가 다시 루프 같은를 사용합니다.

관련 문제