回答:
うん、使用-r
:
scp -rp sourcedirectory user@dest:/path
注:これによりsourcedirectory
内部/path
が作成されるため、ファイルは/path/sourcedirectory
-pr
(逆の順序でオプションが)フォルダをコピーしません、バリではなく、ターゲットディレクトリにその内容(オプション事項の明らかに、順序)。
前の回答は技術的には正しいですが、rsync
代わりに使用することも検討する必要があります。 rsync
送信側と受信側のデータをdiffメカニズムで比較するため、以前に送信されたデータを再送信する必要はありません。
何かをリモートマシンに複数回コピーする場合は、を使用しますrsync
。実際には、rsync
ファイルのアクセス許可と所有権をコピーしたり、特定のファイルやディレクトリを除外したりするなど、より多くのコントロールがあるため、毎回使用するのが良いでしょう。一般に:
$ rsync -av /local/dir/ server:/remote/dir/
ローカルディレクトリをリモートディレクトリと同期します。2回目に実行し、ローカルディレクトリの内容が変更されていない場合、データは転送されませんscp
。毎回すべてを実行してコピーするよりもはるかに効率的です。
また、rsync
とは異なり、中断された転送から非常に簡単に回復できますscp
。
最後に、最新のバージョンはrsync
デフォルトでsshを介して実行されるため、scp
すでに動作している場合はrsync
、ドロップインの代替品になるはずです。
rsync
はより効率的であることに同意します。現在行われていないことの1つscp
は、リモートホスト間でのコピーを許可することです(少なくともそれらの1つでrsyncクライアントを実行せずに)。
-av
:vは詳細、アーカイブ用であり、-rlptgoDへのショートカットであり、再帰を意味し、権利所有者の日付とリンクを保持します。あなただけの再帰的な使用したい場合は-r
それが-r
オプションの目的です。:)
必要に応じて、詳細についてはscpのマニュアルページを参照してください。
再帰的コピーオプション '-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です。
rsync
私が使用したすべてのバージョンがssh
デフォルトで使用さ-essh
れるため、必要になることはほとんどありません。また、リモートホストへの接続に使用するコマンドの選択は、再帰的なコピーとはまったく関係ありません。
再帰的コピーフラグを探し、この投稿のおかげでそれを正常に使用した後、提案を投稿したいと思います。
ケースがディレクトリを(再帰的に)コピーしている場合。ファイルが圧縮されて送信される場合、転送の時間を節約できる可能性があります
私が最後にしたことは:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
お役に立てれば
.tar.gz
か、.tgz
ファイルがgzip圧縮されたtarアーカイブであるので(ので-z
フラグが使用されています)。
次の単純なコマンドを使用して、ディレクトリを圧縮アーカイブに再帰的にコピーできます。
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
たとえば、/var/log
fromのコンテンツをコピーするにはdomain.com
、~/logs.tgz
次を実行します。
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
パイプを使用して、ターゲットシステム上のファイルを抽出することもできます。このコマンドは、の内容をコピーします/var/log
でdomain.com
の~/destination/log
システム上:
ssh -p 22 user@domain.com '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 myremoteusername@122.10.12.123:/dest/folder
scpコマンドで-rオプションを使用すると、任意のシステムでディレクトリを再帰的にコピーできます。他に何か必要な場合はscpコマンドのチュートリアルを参照してください。-rオプションは、ほとんどのLinuxコマンドの再帰操作を表します。
-r
オプションは数年前にすでに提案されており、受け入れられている答えです。
別の(繰り返し使用する方が良い)オプションは、NFSを使用することです-nfs-kernel-serverとNFS共有のセットアップ方法を確認してください。
scp
、NFSはオプションではありません。