web-dev-qa-db-ja.com

scpはディレクトリを再帰的にコピーできますか?

現在、コピーできるのは単一の.tarファイル。しかし、scpを使用してディレクトリを再帰的にコピーするにはどうすればよいですか?

610
kernel

うん、-rを使う:

scp -rp sourcedirectory user@dest:/path
  • -rは再帰を意味します
  • -pは、元のファイルの変更時刻、アクセス時刻、およびモードを保持します。

注:これによりsourcedirectory/path内に作成されるため、ファイルは/path/sourcedirectoryに配置されます

981
dmourati

以前の答えは技術的に正しいですが、代わりに rsync の使用も検討する必要があります。 rsyncは、送信側と受信側のデータをdiffメカニズムと比較するため、以前に送信されたデータを再送信する必要はありません。

何かをリモートマシンに複数回コピーする場合は、rsyncを使用します。実際には、rsyncを使用することをお勧めします。ファイルのアクセス許可と所有権をコピーしたり、特定のファイルやディレクトリを除外したりするための制御が増えるためです。一般に:

$ rsync -av /local/dir/ server:/remote/dir/

ローカルディレクトリをリモートディレクトリと同期します。もう一度実行してローカルディレクトリの内容が変更されていない場合、データは転送されません。scpを実行してすべてを毎回コピーするよりもはるかに効率的です。

また、rsyncとは異なり、scpを使用すると、中断された転送から非常に簡単に回復できます。

最後に、最新バージョンのrsyncはデフォルトでsshを介して実行されるため、scpがすでに機能している場合、rsyncはほとんどドロップイン置換になるはずです。

177
Phil Hollenback

それが-rオプション用です。 :)

必要に応じて、詳細については scp man page を参照してください。

34
HedgeMage

再帰的コピーオプション '-r'(小文字)

scp -r

通常のローカル再帰コピーオプション '-R'(大文字)と混同します

cp -R
12
Tarun

最良の方法はSSH経由でrsyncを使用することです

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

私のお気に入りのオプションは-Pazvessh --deleteです。

  • -a:アーカイブモード(シンボリックリンクの保持など、多くのデフォルトの共通オプションが含まれます)
  • -z:圧縮
  • -v:詳細:ファイルを表示
  • -P:完了したファイル/残りのファイルとして進行状況を表示します
  • -e ssh:sshプロトコルでrsyncを実行します
  • --delete:ソースに存在しない宛先のファイルを削除します
7
mick

再帰的なコピーフラグを探し、この投稿のおかげでそれをうまく使用した後、提案だけを投稿したいと思います。

場合は、ディレクトリを(再帰的に)コピーすることです。ファイルが圧縮されて送信される場合、転送にかかる時間を節約できます

最後に私がしたことは:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

お役に立てれば

4
user9869932

次の簡単なコマンドを使用して、ディレクトリを圧縮アーカイブに再帰的にコピーできます。

ssh -p 22 [email protected]  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

たとえば、/var/logの内容をdomain.comから~/logs.tgzにコピーするには、次のコマンドを実行します。

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' > ~/logs.tgz

パイプを使用して、ターゲットシステム上のファイルを抽出することもできます。このコマンドは、システムの/var/logにあるdomain.comの内容を~/destination/logにコピーします。

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

ディレクトリをミラーリングするには、おそらくrsync...を使用する必要があります.

2
Anubioz

インタラクティブに入力するのではなく、ユーザーのパスワードをパラメーターとして渡したい場合は、sshpassSudo apt-get install -y sshpass)。

例:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1

Scpコマンドで-rオプションを使用して、任意のシステムでディレクトリを再帰的にコピーできます。他に必要な場合は scpコマンドのチュートリアル を参照してください。 -rオプションは、ほとんどのLinuxコマンドでの再帰的な操作を表します。

0
atthik