sftpでディレクトリ全体を取得するにはどうすればよいですか?


189

私はただsftpを使うことを学んでおり、リモートコンピューターからローカルコンピューターにディレクトリをコピーしたいと思っています。私が試してみると

get [directory]

それは私にこのエラーを与えます:

Cannot download non-regular file: /home/mpirocch/Documents

get -R 動作しません。


2
2010年にリリースされた5.4では、再帰的なput / getがOpenSSHに追加されました。多くのバグ修正とセキュリティ機能の追加も行うため、サーバーをアップグレードすることを検討してください。
Lèsemajesté

回答:


266

-r(再帰)フラグを使用します。

get -r *

16
実際に質問に答える答えを書いてくれてありがとう。
jonnyflash

30
私に:get: Invalid flag -r
-ghbarratt

2
これにより、無効なフラグも表示されます。これがすべてのシステムでサポートされているかどうかはわかりません。
ベン

@Ben:2009年にこの質問をしたとき、-r旗は存在しませんでした。システムは最新ですか?
マシュー

15
@silvinciは現在のすべてのシステムではありません。CentOS 6.4の不正なオプションopenssh-clients-5.3p1-84.1.el6.x86_64
CrackerJack9

52

つかいます:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents

3
これは機能しますが、これをSFTPから実行できると便利です(コピーする前にコピーした内容を確認できます)。これは可能ですか?
マシュー

@マシュー:そうは思いません。私はしばらく前から同じ質問をしてきましたが、今の一番の答えはscp -rです。または、Filezillaのような高度なSFTPクライアントを使用できます。
クリスチャン・シウピトゥ

1
SCP -rは...シンボリックリンクをたどるだろう
jsleuth

5
一部のシステムではsftpscpアクセスは許可されますが、アクセスは許可されません。
チュリオン

40

使用lftp

lftp sftp://user@host

次に、lftp内で、cdコピーするmirrorディレクトリに移動し、次のようにコマンドを使用して選択したディレクトリを再帰的にダウンロードします。

mirror

このコマンドは、オプションと引数を受け入れます。

ミラー[ オプション ] [ ソース [ ターゲット ]]

たとえば、-R(または--reverse)オプションを使用すると、ローカルディレクトリツリーがリモートディレクトリにアップロードされます。

mirror -R

参照してくださいlftp(1)manページをプロジェクトのサイトで またはDebian.orgで他のコマンドやオプションのために。


4
+1 lftpは魔法と喜びの小さな束のようなものです!
-WCWedin

16

この小さなガイドが役立つはずです、lftpでリモートサーバーをローカルフォルダーにミラーリングする

lftp sftp://user:password@server.org:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = SFTPプロトコルを使用
  • mirror =ミラーモード
  • verbose =ダウンロード中のファイルを表示
  • use-pget-n =セグメントの数、大きなファイルを高速化するのに本当に便利
  • parallel =乗算器ファイルを同時にダウンロードします

並行してファイルをダウンロードする場合はuse-pget-n=8--parallel=8

これがリモートフォルダーをローカルフォルダーにミラーリングする必要がある人に役立つことを願っています


おかげで、他の方法が失敗した後、これは私にとってはうまくいきました(特にsftpの「-r」オプションはありません)。私の場合、コマンドの最初の部分は引用符lftp 'sftp://user:pa$$word@server.org:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
ジェイソン14年

15

より良いものが見つかる場合は、sftpプログラムを直接使用しないでください。Linuxの場合、多くのファイルマネージャー(少なくともNautilusとDolphin、GNOMEとKDEのマネージャー)はsftpをネイティブにサポートしており、sshfsが常に存在します。Windowsには、WinSCPがあり、おそらく他にもあります。これらのすべてのポイントは、通常のファイルシステムにあるかのようにsftpを介してファイルにアクセスできるようにすることです。したがって、sftpを介してファイルにアクセスしていることを気にする必要はありません。


うわー、nautilusはSFTPで非常にうまく機能します。Nautilusにブックマークを追加しましたが、今ではすべてがとてつもなく簡単です。ありがとう!
マシュー

Nautilus SFTPのパフォーマンスに問題があります。本当に便利ですが、Nautilusを使用して1 Gbit / sネットワークを飽和させることはできませんでした。一方、単純なsftp/sshコマンドラインインターフェイスでは(cca 100 MB / sファイル転送)。したがって、問題はGNU / Linux MintのNautilusでした。
スタムスター

13

mget代わりに試してくださいget

明確化:mget 、あなたがコピーしたいディレクトリ内にあるかどうか動作します。このようなことをすると:

sftp> cd dir_to_get
sftp> mget *

そのディレクトリ内のすべてのファイルを取得します。ただし、サブディレクトリの内容は再帰的に取得されません


1
mgetは私のために得るよりも良い動作しません。
マシュー

1
これで非正規ファイルをダウンロードできません
-Dchris

1
これは、「get -r」が機能しないシステムで機能しました。
Tchotchke

10
get -r [directory]

取得し[directory]、その下にあるすべてr、再帰の略です。helpから入力するだけでこれを見つけましたsftp


1
IMOこれはこの質問に対する最良の答えです。:)
ramrunner

3
これは、1011月29日(ほぼ1年半前)からの回答の複製です。
クリスティアン・Ciupitu 14年


0

リモートサーバーにJava distフォルダーがあり、次のツリーがあります。

- dist
--- Audio.jar
--- README
--- lib
----- lib.jar

目標は次のとおりです。SFTPを使用したいですか?そしてそれらを/ tmp / <>に入れます

ステップ1. sftp remoteuser @ ip

ステップ2. cd / var / tmp

ステップ2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

ステップ3. lcd / tmp / dist

ステップ4. mget *

ステップ5. lcd / tmp / dist / lib

ステップ6. mget *

ステップ7.最後に目標があります

$ ls
Audio.jar  lib  README.TXT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.