web-dev-qa-db-ja.com

sftpを使用してディレクトリを転送しますか?

Sftpを使用してファイルを含むディレクトリを転送しようとすると、エラーメッセージが表示されます。

skipping non-regular file directory_name

ディレクトリには、2つのファイルと2つのサブディレクトリが含まれています。

何が悪いのですか?

54
haziz

sftpは、cpscpと同様に、フォルダー(およびその内容)をコピーするときに、再帰的にフォルダーを転送することを明示的に指示する必要がありますとともに -rオプション。

したがって、-rをコマンドに追加します。

53
Kevin

提案できるのはrsyncだけです。安全な接続を介してファイルを移動する場合、これは業界標準のようなものです。

rsync -alPvz ./source_dir server.com:destination_dir

それは私が何年も前から使ってきたものです。

-aオプションは、ディレクトリの再帰などを処理します)

23
polemon

これは私にとってはうまくいきます:

1)sftp経由でリモートホストに接続する

2)コピーするリモートディレクトリに移動します。 (例:cd音楽)

3)コピー先のローカルディレクトリに移動します。 (例:lcdデスクトップ)

4)次のコマンドを発行します:get -r *

6
Don Karon

Use scpを使用することもできます。一般的なフォーマットは

scp -rp sourceDirName username@server:destDirName

scpは「安全なコピー」を意味します。フラグは

  • -rサブディレクトリに再帰します
  • -p変更時刻を保持

残りの項目は自明だと思います

5
Bina Ramamurthy

rsyncがオプションでない場合は、次にlftpをお勧めします。

lftp sftp://[email protected]/path/path/

次に、mirrorコマンドを使用して、次のように再帰的にアップロードします。

mirror -R

(再帰がデフォルトであることに注意してください。-Rreverseのためのものです。ミラーコマンドをダウンロードではなくアップロードします。--dry-runを追加して試してみてください。あなたが期待することをしています。)

または、再帰なしでアップロードするには:

mirror --no-recursion

ミラーリングするディレクトリにcdする必要があります。よく働く!

5
Banago

可能であれば、 sshfs を使用してください。これは Fuse ファイルシステムであり、ほとんどの最新のuniceで利用可能で、あらゆるSFTPサーバーで動作します。これはリモートファイルシステムです。通常のユーティリティを使用して、リモートファイルを(SFTPプロトコル経由で)操作できます。

mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point

「sftpを使用してディレクトリを転送する方法」が実際の質問である場合は、

 sftp -r user@server

ただし、ディレクトリを転送する場合は、必要に応じて、2つのより良いオプションを提案する場合があります。 sftpは、sshのようなコマンドプロンプトでリモートサーバーにログインする必要がありますが、必要なのがファイルだけであれば、より簡単で迅速な方法があります。

Scp

1回限りの転送の場合、アップロードするには以下を試してください。

 # upload source directory to remote server
 scp -rp source_dir user@server:dest

 #download directory from remote server:
 scp -rp user@server:source_dir dest

 #specifying ssh key:
 scp -rp -i ~/.ssh/key user@server:source_dir dest

 #remote directory has spaces
 scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest

Rsync

定期的にディレクトリを同期する予定の場合は、rsyncを使用する方が理にかなっています。 2つのディレクトリ間でデルタを実行し、ネットワーク経由の転送時間とデータを節約します。

rsync -r -a -v -e ssh --delete source_dir user@server:dest

最も一般的なrsyncオプションの一部を以下に示します:( ここから取得

  • --delete-送信者(システム)に存在しないファイルを削除します
  • -v-詳細(-vvはより詳細な情報を提供します)
  • -e "ssh options"-リモートシェルとしてsshを指定します
  • -a-アーカイブモード-アクセス許可(所有者、グループ)、時間、シンボリックリンク、デバイスを保持します
  • -r-ディレクトリに再帰します
  • -z-転送中にファイルデータを圧縮します
  • --exclude 'foldername' –対応するフォルダーを転送から除外します
  • -P –転送中に進行状況を表示

お役に立てば幸いです。

0
Dan Williams

あなたはサーバーからローカルパスに行くことができます

scp -rp user@server:directoryname(full path) .
0
user368621

それは少し厄介ですが、私にとってうまくいくのは次のことです:

  1. sshを使用してリモートマシンにログインします。
  2. リモートマシンからローカルマシンにsftpを使用します
  3. 次に、getコマンドと-rオプションを使用して、ディレクトリとそのすべてのファイルを移動します。
0
Matthew Greene