wgetを使用してFTPディレクトリ全体を再帰的にダウンロードする


93

すべてのファイルとフォルダーをあるホストから別のホストにコピーしたい。古いホスト上のファイルは/ var / www / htmlにあり、そのサーバーへのFTPアクセスしかありません。すべてのファイルをTARすることはできません。FTP経由で古いホストに定期的に接続すると、/ home / adminフォルダーに移動します。

新しいサーバーから次のコマンドを実行してみました。

wget -r ftp://username:password@ip.of.old.host

ただし、作成されるのはindex.htmlファイルのみです。

FTPでwgetを再帰的に使用するための正しい構文は何ですか?


2
デフォルトでは、wget -rの最大再帰深度は5であることに注意してください。より深いサブディレクトリがある場合、これを変更しない限り無視されます(manページの-lを参照)。
マイクウォーターズ

回答:


125

お試し-m--mirror

wget -m ftp://username:password@ip.of.old.host

15
セキュリティ上の理由--ask-passwordから、パスワードがに保存されないようにするために使用するとよいでしょうhistory
チェックサム14年

これはとてもクールです。魔法のように働いていた...
Sambhavシャルマ

これは受け入れられた答えでなければなりません(より良い可視性のために)。
-bgondy

それは私が@Formodaの答えは優れていると思い、ダウンロードするディレクトリのパスが含まれていません
Wasim A.

。@WasimA、あなただけのもここのディレクトリ・パスを追加することができますwget -m ftp://username:password@ip.of.old.host/mydir/
アレックス・チェ

37

あなたはそれを正しく持っています、あなたは最後に末尾の*が必要です:

wget -r ftp://username:password@1.2.3.4/dir/*

共有サーバーの場合、次のように使用できます。

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

ほとんどの共有サーバーには、username @ hostnameのようなftp-usernameがあるため、最初のwgetコマンドは機能せず、2番目のコマンドは正常に機能します。


1
これは1つのディレクトリの深さだけになります。
m

場合によっては、スペースが原因で2番目のコマンドが機能しないことがあります。このような共有ホスティングには、最初のコマンドを使用できます。** wget -r ftp:/ / username%40host:password @ host / dir / **
Wasim A.

注:どちらか、-mまたは -r -l inf-rのデフォルトの再帰深度は5であるため、使用する必要があります。gnu.org
software / wget /

7

wgetの他に、スクリプトモードでlftpを使用することもできます。次のコマンドは、指定されたリモートFTPディレクトリの内容を指定されたローカルディレクトリにミラーリングし、cronジョブに入れることができます。

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

ディレクトリへの再帰を自動的に処理し、データをダウンロードするリモートソースの開始ディレクトリを指定できます。


5

「curlftpfs-ftpホストをローカルディレクトリとしてマウントする」を使用できます。マウントしたら、「cp -r」などの通常のファイルツールを使用できます。


curlftpfsダウングレードしない限り、現在大きなパフォーマンスの問題がありますlibcurl3-gnutls
-Hengjie

5

以下のwgetコマンドをチェックして、FTPからデータを再帰的にダウンロードします。

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r:再帰的にダウンロードするためのものです。

-np:親が昇順ではありません。

-nH:URLと同じ名前(abc.xyz.comなど)のディレクトリの作成を無効にします

--cut-dirs:親ディレクトリの数を無視するためです。このオプションの値は、コマンドによって異なります。

上記のコマンドを実行して確認できます。



2

動作するはずです:

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/

2

つかいます:

wget -m ftp://192.168.0.1

すべてのファイルとフォルダーをミラーリングします。


先ほど言ったように、FTP経由でログインすると/ home / adminフォルダーに移動し、必要なファイルは/ var / www / htmlにあります。したがって、提案されたコマンドを実行すると、/ home / adminの内容のみが取得されます。192.168.0.1/var/www/htmlで実行しようとしましたが、CWD / home / admin / var / www / htmlを試みます。ルートからこのフォルダーに移動するにはどうすればよいですか?

この特定の問題については経験がありませんが、自宅の下にある/ var / www / htmlへのシンボリックリンクを作成してみてください。その後、192.168.0.1
htmlの

シンボリックリンクを作成しようとしましたが、wgetがローカルで同様のシンボリックリンクを作成した結果です。

1

それが正しい構文です。期待した結果が得られない理由がわかりません。

相変わらずそれを行うには複数の方法があります。ncftp、特にncftpgetを試してください


新しいサーバーにこれ以上ソフトウェアをインストールできません。/ var / www / htmlからすべてのファイルをダウンロードするようにwgetに指示してはいけませんか?wget -r username:password@ip.of.old.host/var/www/htmlを試しましたが、ディレクトリが見つからないというエラーが発生しました。

1

これをcronなどにダンプしようとしているのか理解できますが、通常のクライアントとmget *を使用してサーバーに単純にftpしないのはなぜですか?これは、成功へのより速い道かもしれません。


mget *を試しましたが、ローカルのサブフォルダーが存在しないと言って、サブフォルダーでは機能しませんでした。彼にローカルフォルダーを自動的に作成させる方法はありますか?

クライアントによって異なりますが、通常は-rスイッチが役立ちます。IE:mget -r *
dr.pooter 2009年

うーん。LinuxのAFAIK標準FTPクライアントは、ディレクトリを再帰的に取得するようには設計されていません。つまり、-rオプションはありません。ncftpやlftpなどの他のクライアントは再帰的な取得をサポートしていますが、通常はデフォルトでは利用できません。
スターン

1

前述したように、FTP経由でログインすると/ home / adminフォルダーに移動し、必要なファイルは/ var / www / htmlにあります

私はこれがあなたの場合にうまくいくと思います:

wget -r ftp://192.168.0.1/../../var/www/html

0

ユーザー名がbrinkster / usernameのWindowsホスティングに遭遇したため、次の構文を使用するとwgetがエラーをスローします。

wget -m ftp://brinkster/username:password@ip.of.the.host

これを乗り越えるには、

wget -m ftp://brinkster%2Fusername:password@ip.of.old.host

@ brinksterをホストしているWindowsでこれに直面しなければなりませんでした。


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename 仕事をするか、ファイル名の代わりに*を追加することができますentring:wgetにあなたの場合無効なポートを考えさせます。


複数の投票済みの回答を含む4年前の質問に対するこの回答では、新しいものは提供されず、再帰コピーの要件も省略されます。
スヴェン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.