파일 목록에서 LFTP 실행

파일 목록에서 LFTP 실행

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

관련 정보