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などとしてエクスポートすることができます。
よろしければ、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ページにはもっとあります...
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を設定できます。
ただし、ファイルのリストの取得をサポートするプログラムまたは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
ファイルを準備できます。