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
"다음과 같은 작업은 완벽하지만 로그인, 나가기, 다시 들어가야합니다"라는 메시지가 문제입니까? 그렇다면 왜? – msw
정말 문제는 아니지만 그냥 해킹처럼 보입니다. 더 깨끗한 방법이 있는지 궁금합니다. – user1318520
9.6Kbit/초 이상의 원격 파일에 액세스하기위한 1985 프로토콜이 해킹 된 솔루션을 산출한다는 것은 놀랍습니다. [Linux Userland Filesystem] (http://sourceforge.net/projects/lufs/)과 같은 원격 사이트를 마운트한다면 파일 시스템 의미론을 가지기 때문에 두 번 통과 할 필요가 없습니다 (누가 구현했는지 얼마나 많은 ftp 교환에 관심이 있는지). – msw