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


50

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

skipping non-regular file directory_name

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

何が間違っていますか?

回答:


49

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

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


2
-r putコマンドの後?「put:Invalid flag -r」というエラーメッセージメッセージが表示されます。元のsftpコマンドに追加しても機能しません。
haziz

5
接続しているとき-rsftpコマンドに追加します。 sftp -r user@host
ケビン

1
:私は、次のエラー「未知のオプション-R-sftpの」取得しています@Kevin
Amatya

2
OpenSSHのSFTP には非常に長い間バグがあることに注意してください。ディレクトリをリモートサーバーに再帰的にコピーする場合、ディレクトリ自体がターゲットサーバーに既に存在している必要がありますCouldn't canonicalise: No such file or directory
WhiteWinterWolf

5
次のようになります# sftp user@remote-host #> get -r remote-folder
。– hbinduni

21

私は提案することができます、あなたはを使用しますrsync。セキュアな接続を介してファイルを移動する場合、これは業界標準です。

rsync -alPvz ./source_dir server.com:destination_dir

それは私が今まで何年も使用してきたものです。

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


3
言及されたパラメーターに関する少しの明確化:-a=再帰+シンボリックリンク、アクセス許可、変更時間、所有者、グループ、特殊ファイル、およびデバイスファイルを保持します(後者にはスーパーユーザー権限が必要です)。-l=シンボリックリンクを保持します(既に含まれています-a)。-P=転送中に進行状況を表示+部分的に転送されたファイルを保持。-v=詳細モード(ただし-P、奇妙な(バグ?)protocol version mismatchエラーを回避するために使用する場合は必須のようです); -z=転送されたデータの圧縮を有効にします。
WhiteWinterWolf

@WhiteWinterWolfは、-lスイッチを使用する必要があるかどうかにかかわらず、バージョンに依存しているようです。古いバージョンはに含ま-lれていなかったことを覚えています-a
ポレモン

5

useを使用することもできますscp。一般的な形式は

scp -rp sourceDirName username@server:destDirName

scp「セキュアコピー」を意味します。フラグは

  • -r サブディレクトリに再帰する
  • -p 変更時間を保存する

残りの項目は一目瞭然だと思います


そして、scp -rp -P <ポート> ....非標準ポート使用している場合
パンチョ

4

これは私のために働く:

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

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

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

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


4

場合はrsyncオプションではありません、私は次の推薦しますlftp

lftp sftp://user@host.com/path/path/

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

mirror -R

(再帰がデフォルトであることに注意してください。これ-R逆です —ダウンロードの代わりにミラーコマンドをアップロードします。追加--dry-runしてみて、試してみて、期待どおりに動作することを確認してください。)

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

mirror --no-recursion

あなたは持っているcdディレクトリにミラーリングしたいです。よく働く!


2

可能であれば、sshfsを使用します。これはFUSEファイルシステムであり、ほとんどの最新の大学で利用でき、あらゆる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

0

それはちょっと面倒ですが、私のために働くのは:

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

1
-rといけない仕事を得るsftp> get -r data /opt/bin get: Invalid flag -r
スカイネット

0

あなたが実際に「ディレクトリを転送するためにどのようにsftpを使用するのですか」という質問であれば、

 sftp -r user@server

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

SCP

一度だけ転送する場合は、アップロードしてみてください:

 # 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 –転送中の進行状況を表示

お役に立てば幸いです!


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