对文件列表运行 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

为了扩展史蒂夫的答案,如果需要,此脚本会在保留目录的同时镜像文件列表。

#!/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

相关内容