現在、コピーできるのは単一の.tar
ファイル。しかし、scp
を使用してディレクトリを再帰的にコピーするにはどうすればよいですか?
うん、-r
を使う:
scp -rp sourcedirectory user@dest:/path
注:これによりsourcedirectory
が/path
内に作成されるため、ファイルは/path/sourcedirectory
に配置されます
以前の答えは技術的に正しいですが、代わりに rsync
の使用も検討する必要があります。 rsync
は、送信側と受信側のデータをdiffメカニズムと比較するため、以前に送信されたデータを再送信する必要はありません。
何かをリモートマシンに複数回コピーする場合は、rsync
を使用します。実際には、rsync
を使用することをお勧めします。ファイルのアクセス許可と所有権をコピーしたり、特定のファイルやディレクトリを除外したりするための制御が増えるためです。一般に:
$ rsync -av /local/dir/ server:/remote/dir/
ローカルディレクトリをリモートディレクトリと同期します。もう一度実行してローカルディレクトリの内容が変更されていない場合、データは転送されません。scp
を実行してすべてを毎回コピーするよりもはるかに効率的です。
また、rsync
とは異なり、scp
を使用すると、中断された転送から非常に簡単に回復できます。
最後に、最新バージョンのrsync
はデフォルトでsshを介して実行されるため、scp
がすでに機能している場合、rsync
はほとんどドロップイン置換になるはずです。
それが-r
オプション用です。 :)
必要に応じて、詳細については scp man page を参照してください。
再帰的コピーオプション '-r'(小文字)
scp -r
通常のローカル再帰コピーオプション '-R'(大文字)と混同します
cp -R
最良の方法はSSH経由でrsyncを使用することです
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
私のお気に入りのオプションは-Pazvessh --deleteです。
再帰的なコピーフラグを探し、この投稿のおかげでそれをうまく使用した後、提案だけを投稿したいと思います。
場合は、ディレクトリを(再帰的に)コピーすることです。ファイルが圧縮されて送信される場合、転送にかかる時間を節約できます
最後に私がしたことは:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
お役に立てれば
次の簡単なコマンドを使用して、ディレクトリを圧縮アーカイブに再帰的にコピーできます。
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
...を使用する必要があります.
インタラクティブに入力するのではなく、ユーザーのパスワードをパラメーターとして渡したい場合は、sshpass
(Sudo apt-get install -y sshpass
)。
例:
sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
Scpコマンドで-rオプションを使用して、任意のシステムでディレクトリを再帰的にコピーできます。他に必要な場合は scpコマンドのチュートリアル を参照してください。 -rオプションは、ほとんどのLinuxコマンドでの再帰的な操作を表します。