web-dev-qa-db-ja.com

絶対パスのFTPダウンロードリスト

PCにダウンロードする必要があるリモートサーバー上のファイルへの(数千の)絶対パスのリストがあります。

また、これらのファイルのディレクトリ構造をそのまま維持するためのファイルも必要です。

例:

/* UNIX Server File-System  */
/home/username/
    stuff/
    more-stuff/
    data/
    file1.txt

/* Local Windows File-System After Transfer  */
C:\Users\username\Documents\home\username\
    stuff\
    more-stuff\
    data\
    file1.txt

理想的には、ある種のFTPを使用してそれらのファイルをPCに取得します。ただし、ファイルのリストの取得をサポートするプログラムまたはCLIコマンドを認識していません。特定のディレクトリから特定のファイルを取得する必要があります。ディレクトリ全体をダウンロードするだけでは不十分です。

私の質問:絶対パスのリストを使用して、ファイルをローカルホストに自動的にダウンロードするにはどうすればよいですか? (ディレクトリ構造をそのまま維持しながら)

さらに、これらのファイルはPHP配列にあります。したがって、リストをJSON、CSV、XMLなどとしてエクスポートすることができます。

5

よろしければ、rsyncを次のようなもので使用できます。

rsync -av --files-from=/path/yourlist.txt / remote:/backup

どこで

  • /path/yourlist.txtファイルのリストをフルパスで入力できます
  • /リスト内のファイル名に追加するパス(フルパス名の場合/
  • remote:/backupリモートホスト名とその相対パス

--files-fromからman rsyncを検索する詳細を読むことができます [ 1 ]

-files-from = FILE

Using this option allows you to specify the exact list of files to transfer (as
read from the specified FILE or - for standard input). It also tweaks the 
default  behavior of rsync to make transferring just the  specified files and 
directories  easier:
  • -relative(-R)オプションが暗黙指定され、ファイル内の各アイテムに指定されたパス情報が保持されます(--no-を使用)相対または--no-R(オフにする場合)。
  • -dirs(-d)オプションが暗黙指定されます。これにより、ノイズの多いスキップではなく、宛先のリストで指定されたディレクトリが作成されます(-を使用) no-dirsまたは--no-d(オフにする場合)。
  • -archive(-a)オプションの動作は、-recursive(-r)を意味しないため、必要に応じて明示的に指定してください。
  • これらの副作用により、rsyncのデフォルト状態が変更されるため、コマンドラインの--files-fromオプションの位置は、他のオプションの解析方法とは関係ありません(たとえば、-aは--files-の前後で同じように機能します)。 from、-no-Rおよび他のすべてのオプションも同様です)。

... manページにはもっとあります...

3
Hastur

wgetにはあなたが探している機能があります。マンページから:

-i file
       --input-file=file
           Read URLs from a local or external file.  If - is specified as file, URLs are read from the standard input.  (Use ./- to read from a file literally named -.)

言い換えれば、wget -i filelist.txt

wgetは--force-htmlスイッチを介してhtmlをサポートしているため、filelistは必ずしもtxtである必要はありません。ディレクトリ/ファイルのリストしかない場合は、コマンドラインで--baseスイッチを使用してベースURLを設定できます。

5
Jarmund

ただし、ファイルのリストの取得をサポートするプログラムまたはCLIコマンドを認識していません。

なぜこれがつまずきになるのかわかりません。スクリプトをソースとしてftpを実行できます。

cd Target_Directory
ftp -v -s:script.ftp ftp.myhost.net 1> /absolute/path/to/my/logfile 2>&1

ここで、Target_Directoryはダウンロードしようとしているファイルを配置する場所であり、script.ftpは次のようなスクリプトファイルです。

USER MyUserId
MyPassword
cd SOURCE_DIR
binary
Prompt n
mget the_first_file_I_need
mget the_second_file_I_need
bye

これは単一サイトの場合は問題ありません。いくつのサイトはどうですか?次の行を使用して、script_mainというスクリプトファイルを作成できます。

cd Target_Directory_1
ftp -v -s:script_1.ftp ftp.myhost_1.net 1>> /absolute/path/to/my/logfile 2>>&1
cd Target_Directory_2
ftp -v -s:script_2.ftp ftp.myhost_2.net 1>> /absolute/path/to/my/logfile 2>>&1
....

等々。持っている情報を適切に分離されたファイルに解析することにより、scrip_N.ftpファイルを準備できます。

2
MariusMatutiae

aria2 可能性があります。

ドキュメント から:

-d、-dir =

ダウンロードしたファイルを保存するディレクトリ。

-i、-input-file =

FILEにリストされているURIをダウンロードします。 TAB文字で区切られた1行に複数のURIを配置することにより、単一のエンティティに複数のソースを指定できます。さらに、各URI行の後にオプションを指定できます。オプション行は、1つ以上の空白文字(スペースまたはタブ)で始まる必要があり、行ごとに1つのオプションのみを含める必要があります。入力ファイルはgzip圧縮を使用できます。

これには、ディレクトリごとに個別の入力ファイルが必要になります。

2
harrymc