FTP経由でwgetを使用してディレクトリをミラーリングしようとしています。私が使用しているコマンドは
wget -m ftp://user:[email protected]/foo/bar/
しかし、実行すると、次のようになります。
--2018-10-10 15:01:32-- ftp://user:*password*@192.168.1.1/foo/bar/
=> ‘192.168.3.150/foo/bar/.listing’
Connecting to 192.168.1.1:21... connected.
Logging in as user ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /usr/user/foo/bar ...
No such directory ‘foo/bar’.
マニュアルページを検索してグーグルで検索しましたが、わかりません。 wgetに「/ usr/user/foo/bar /」ではなく「/ foo/bar /」ディレクトリを実際にダウンロードさせるにはどうすればよいですか?
stackoverflowに関する同様の質問 (wgetの代わりにJavaが含まれますが、実際には根本的な問題は、言語に依存しないURL構文にあります)を追加することで解決されました次のように、別のスラッシュとURLエンコードを行います。
wget -m ftp://user:[email protected]/%2Ffoo/bar/
エンコードしなくても、スラッシュを追加するだけで機能します。
wget -m ftp://user:[email protected]//foo/bar/
最初のスラッシュは破棄され(ホストとパスの間の区切り文字としてのみ機能します)、2番目のスラッシュは実際にはパスの一部としてカウントされます。
次のようにwget
を使用して特定のディレクトリをダウンロードできるはずです。
wget -m 'ftp://[user]@192.168.1.1/%2ffoo/bar' -O /foo/bar
パスワードがbash履歴に表示されるため、URLにパスワードを入力することは避けます。もちろん、このコマンドは、/foo/bar
が/
の外にあり、他の場所にはないことを意味します。 /foo/bar
が/var/www
のようなものから離れている場合は、コマンドにフルパスを含める必要があります。
/usr/user
に基づいたUNIXライクを使用していると思いますので、使用しているwget
の特定の実装の機能に違いがあるかもしれません。
curl
を使用する別の方法は次のとおりです。
curl -u [user] 'ftp://192.168.1.1/%2fpath/to/foo/bar' -o /path/to/foo/bar
これらのリンクをお読みください:
FTP URL
wgetの使い方
wgetを使用してFTPディレクトリを再帰的にダウンロードする
wgetを使用して現在のディレクトリとは異なるディレクトリにダウンロード
wgetで場所を指定する方法は?
cURLを使用してFTPからファイルをダウンロードする
この回答に関して質問や問題がある場合はコメントしてください。コマンドを試す前に、私が提供した各リンクをよく読んでおくことを強くお勧めします。誤解を正し、投稿を改善するためのフィードバックに感謝します。必要に応じて回答を更新できます。
幸運を祈ります!