あるリモートLinuxサーバーから別のリモートLinuxサーバーにディレクトリ(サブディレクトリとファイルを含む)をコピーする最良の方法は何ですか?SSHクライアント(Puttyなど)を使用して両方に接続しました。私は両方にrootアクセスできます。
16 に答える
私が通常これを行うには2つの方法があり、どちらもsshを使用します。
scp -r sourcedir/ user@dest.com:/dest/dir/
または、より堅牢で高速な(転送速度の観点から)方法:
rsync -auv -e ssh --progress sourcedir/ user@dest.com:/dest/dir/
コマンドの動作の詳細が必要な場合は、各コマンドのマニュアルページをお読みください。
以前に提案された返信を変更します:
rsync -avlzp /path/to/sfolder name@remote.server:/path/to/remote/dfolder
次のように:
-a(アーカイブ用)は-rlptgoDを意味するため、上記のlとpは不要です。ハードリンクをコピーする-Hも含めるのが好きです。高価なため、デフォルトでは-aの一部ではありません。だから今私たちはこれを持っています:
rsync -aHvz /path/to/sfolder name@remote.server:/path/to/remote/dfolder
また、末尾のスラッシュにも注意する必要があります。あなたはおそらくしたい
rsync -aHvz /path/to/sfolder/ name@remote.server:/path/to/remote/dfolder
ソース「sfolder」のコンテンツを宛先「dfolder」に表示したい場合。末尾のスラッシュがないと、宛先の「dfolder」に「sfolder」サブディレクトリが作成されます。
rsync -avlzp / path / to / folder name@remote.server:/path/to/remote/folder
scp -r <directory> <username>@<targethost>:<targetdir>
1台のマシンにログインします
$ scp -r / path / to / top / directory user @ server:/ path / to / copy
rsyncを使用して、接続が切断された場合に続行できるようにします。そして、何かが変わった場合、あなたもそれらをはるかに速くコピーすることができます!
RsyncはSSHで動作するため、コピー操作は安全です。
タスクが繰り返される場合は unison を試してください。 http://www.cis.upenn.edu/~bcpierce/unison/
rdiffbackup http://www.nongnu.org/rdiff-backup/index.htmlを使用しました。これは、特別なオプションがなくても必要なすべてを実行できるためです。これはrsyncアルゴリズムに基づいています。一度だけコピーする必要がある場合は、後で宛先ホストのrdiff-backup-dataディレクトリを削除できます。
rdiff-backup user1@host1::/source-dir user2@host2::/dest-dir
ドキュメントから:
rdiff-backupは、サブディレクトリ、ハードリンク、開発ファイル、アクセス許可、uid / gidの所有権、変更時間、拡張属性、ACL、およびリソースフォークも保持します。
これは、-pオプションがすべてを保持するわけではないため、scp -p提案のボーナスです(たとえば、ディレクトリの権限が正しく設定されていません)。
ubuntuにインストール:
sudo apt-get install rdiff-backup
scpはその役割を果たしますが、1つの問題があります。2番目のリモート宛先への接続は最初のリモート宛先の構成を使用するため、ローカル環境で.ssh / configを使用し、rsaおよびdsaキーが作業するには、エージェントを最初のリモートホストに転送する必要があります。
さて、簡単な答えは、コピーする必要があるものに正確に応じて、「scp」マンページ、またはおそらくrsyncを調べることです。必要に応じて、tar-over-sshを実行することもできます。
tar cvf - | ssh server tar xf -
私はあなたが試すことができると思います:
rsync -azvu -e ssh user@host1:/directory/ user@host2:/directory2/
(そして、あなたはhost0にいて、host1からhost2に直接コピーしたいと思います)
上記がうまくいかない場合は、次の方法を試してください。
ssh user@host1 "/usr/bin/rsync -azvu -e ssh /directory/ user@host2:/directory2/"
これで、host1からhost2へのパスワードなしのSSHログインをすでにセットアップしている場合は機能します
非rootユーザーとして理想的には:
scp -r src $ host:$ path
$ hostのコンテンツの一部がすでにある場合は、トンネルとしてsshを使用してrsyncを使用することを検討してください。
/アラン
正確なコピーが必要な場合は、-p スイッチを scp に使用することもお勧めします (使用している場合)。私は scpが devices から読み取ることを発見し、 cpio に問題があったため、個人的には次のようにtarを常に使用しています。
cd /origin; find . -xdev -depth -not -path ./lost+found -print0 \
| tar --create --atime-preserve=system --null --files-from=- --format=posix \
--no-recursion --sparse | ssh targethost 'cd /target; tar --extract \
--overwrite --preserve-permissions --sparse'
私はこの呪文をファイルに保存し、ファイルをコピーする他のさまざまな方法を使用しています。これは SSH 経由でコピーするためのものです。他のものは、圧縮されたアーカイブにコピーするため、同じコンピューター内でコピーするため、および SSH が遅すぎる場合に暗号化されていない TCP ソケットを介してコピーするためのものです。
上記の scp が通常は最善の方法ですが、リモート ディレクトリの指定でコロンを忘れないでください。そうしないと、ローカル マシンにソース ディレクトリのコピーが作成されます。
私は ssh を通して tar をパイプするのが好きです。
tar cf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] tar xf - -C [リモート ボックスの宛先]
この方法では、多くのオプションが提供されます。通常のユーザーとしてリモートサーバーにログインしているため、root ssh を無効にして複数のユーザーアカウントのファイルをコピーするのは困難です。これを回避するには、所有権を保持しているリモート ボックスに tar ファイルを作成します。
tar cf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] "cat > output.tar"
接続が遅い場合は、圧縮 (gzip の場合は z、bzip2 の場合は j) を追加できます。
tar cjf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] "cat > output.tar.bz2"
tar czf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] "cat > output.tar.gz"
tar czf - [ディレクトリ] | ssh [ユーザー名]@[ホスト名] tar xzf - -C [リモート ボックスの宛先]