LFTP를 통해 원격 컴퓨터에서 동일한 디렉터리 구조를 가진 로컬 컴퓨터로 다운로드하려는 파일 경로의 개행 구분 목록이 있습니다. LFTP가 파일 목록(원격 시스템에 있는 파일의 전체 경로)을 전달하고 해당 파일만 다운로드하도록 할 수 있는 방법이 있습니까? 현재 접근 방식은 각 파일을 LFTP에 개별적으로 전달하고 다운로드한 후 목록이 소진될 때까지 다음 파일에 대해 동일한 프로세스를 반복하는 것입니다. 분명히 일괄적으로 파일을 다운로드하는 것이 훨씬 더 빠를 것입니다. 현재 솔루션은 투박한 느낌입니다.
답변1
이런 건 어때요?
[root@localhost foo]# ls -l file*
-rw-r--r--. 1 root root 33 Jun 30 15:09 filelist
[root@localhost foo]# cat filelist
/tmp/file1
/tmp/file2
/tmp/file3
[root@localhost foo]# awk 'BEGIN { print "open localhost\nuser steve steve\n" } { print "get " $0 } END { print "exit" }' filelist | lftp
[root@localhost foo]# ls -l file*
-rw-r--r--. 1 root root 0 Jun 30 14:57 file1
-rw-r--r--. 1 root root 0 Jun 30 14:57 file2
-rw-r--r--. 1 root root 0 Jun 30 14:57 file3
-rw-r--r--. 1 root root 33 Jun 30 15:09 filelist
[root@localhost foo]#
답변2
Steve의 답변을 확장하기 위해 이 스크립트는 필요한 경우 디렉터리를 보존하면서 파일 목록을 미러링합니다.
#!/bin/bash
gawk 'BEGIN { print "open ftp://example.com\n user username password\ncd /remote/dir/\n" } { if (match ($0 ,/.+\//, m)) print "mirror -v -O localbasedir/" m[0] " -f " $0 } END { print "exit" }' filelist | lftp