
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