2014-09-07 3 views
1

FTP 서버에 파일을 업로드하기위한 간단한 bash 스크립트를 작성했습니다. FTP를 사용해야합니다 ... 원격 서버를 제어 할 수 없습니다. 업로드 비트가 예상대로 작동하므로 새 파일을 업로드하기 전에 "라이브"디렉토리에있는 기존 파일의 이름을 바꾸는 코드를 통합하고 싶습니다. 이름 바꾸기 명령은 와일드 카드 또는 일괄 처리를 허용하지 않으므로이 루프를 읽어야합니다.bash 스크립트를 사용하여 FTP 서버의 파일 이름을 일괄로 바꿉니다.

다음은 스크립트입니다.

drwxrwxrwx 1 user  group   0 Sep 7 08:27 . 
drwxrwxrwx 1 user  group   0 Sep 7 08:27 .. 
-rw-rw-rw- 1 user  group  6506940 Sep 7 11:07 FILENAME1.tif 
-rw-rw-rw- 1 user  group  6506940 Sep 6 10:21 FILENAME2.tif 

그런 AWK 실행, 나에게이주는 :

FILENAME1.tif 
FILENAME2.tif 

#!/bin/bash 

cd $UPLOADS 
echo "open $SERVER 
user $NAME $PASSWORD 
binary 
cd Live 
ls > /tmp/$DIRLIST" > /tmp/ftp.$$ 
awk -F" " 'NR>2 {print $9} ' /tmp/$DIRLIST > /tmp/$MOD 
cat /tmp/$MOD | while read tif 
do 
echo "rename $tif ../Done/$tif" >> /tmp/ftp.$$ 
done 
echo "mput *.tif 
quit" >> /tmp/ftp.$$ 
ftp -pin < /tmp/ftp.$$ 
rm /tmp/ftp.$$ 

나는 다음 나에게주는 임시 파일에 LS의 결과를 전송, 로그인 해요

내가 지금 가지고있는 방식의 문제는 FTP 명령을 만들고 실행하여 awk가 먼저 실행된다는 것입니다. ls가 temp ($ DIRLIST) 파일을 아직 작성하지 않았기 때문에 awk를 실행할 파일이 없습니다.

전체 프로세스를 하나의 스크립트로 실행할 수 있습니까? 그렇다면 어떻게 할 수 있습니까? 두 가지 스크립트를 실행할 수는 있지만 선호하지는 않습니다.

UPDATE

다음 작품 완벽하지만, 아웃하고 다시 로그인이 필요합니다 : 당신이 연결할 때

다음
#!/bin/bash 

# log in once to write current list of files to /tmp/$DIRLIST 
ftp -pin $SERVER <<END_SCRIPT 
user $NAME $PASSWORD 
cd Live 
ls > /tmp/$DIRLIST 
quit 
END_SCRIPT 

# skip first two lines(. and ..) get a clean list of files 
awk -F" " 'NR>2 {print $9} ' /tmp/$DIRLIST > /tmp/$MOD 

# log back in rename existing files and upload new files 
cd $UPLOADS 
echo "open $SERVER 
user $NAME $PASSWORD 
binary 
cd Live" > /tmp/ftp.$$ 
cat /tmp/$MOD | while read tif 
do 
echo "rename $tif ../Done/$tif" >> /tmp/ftp.$$ 
done 
echo "mput *.tif 
quit" >> /tmp/ftp.$$ 
ftp -pin < /tmp/ftp.$$ 

#cleanup 
rm /tmp/ftp.$$ 
rm /tmp/$DIRLIST 
rm /tmp/$MOD 
+0

"다음과 같은 작업은 완벽하지만 로그인, 나가기, 다시 들어가야합니다"라는 메시지가 문제입니까? 그렇다면 왜? – msw

+0

정말 문제는 아니지만 그냥 해킹처럼 보입니다. 더 깨끗한 방법이 있는지 궁금합니다. – user1318520

+0

9.6Kbit/초 이상의 원격 파일에 액세스하기위한 1985 프로토콜이 해킹 된 솔루션을 산출한다는 것은 놀랍습니다. [Linux Userland Filesystem] (http://sourceforge.net/projects/lufs/)과 같은 원격 사이트를 마운트한다면 파일 시스템 의미론을 가지기 때문에 두 번 통과 할 필요가 없습니다 (누가 구현했는지 얼마나 많은 ftp 교환에 관심이 있는지). – msw

답변

0

가 무슨 의미가되고, 그래서 AWK 위의 MPUT를 넣어 파일 이름 바꾸기 전에이 파일이 있습니다

#!/bin/bash 

# log in once to write current list of files to /tmp/$DIRLIST 
ftp -pin $SERVER <<END_SCRIPT 
user $NAME $PASSWORD 
cd Live 
ls > /tmp/$DIRLIST 
quit 
END_SCRIPT 

# skip first two lines(. and ..) get a clean list of files 
awk -F" " 'NR>2 {print $9} ' /tmp/$DIRLIST > /tmp/$MOD 

# log back in rename existing files and upload new files 
cd $UPLOADS 
echo "open $SERVER 
user $NAME $PASSWORD 
binary 
cd Live" > /tmp/ftp.$$ 
echo "mput *.tif 
quit" >> /tmp/ftp.$$ 
cat /tmp/$MOD | while read tif 
do 
echo "rename $tif ../Done/$tif" >> /tmp/ftp.$$ 
done 
ftp -pin < /tmp/ftp.$$ 

#cleanup 
rm /tmp/ftp.$$ 
rm /tmp/$DIRLIST 
rm /tmp/$MOD 
관련 문제