解決策 1:
はい、-r
を使用します :
scp -rp sourcedirectory [email protected]:/path
- -r は再帰を意味します
- -p は、元のファイルの変更時刻、アクセス時刻、およびモードを保存します。
注:これにより sourcedirectory
が作成されます /path
内 したがって、ファイルは /path/sourcedirectory
になります
解決策 2:
前の回答は技術的に正しいですが、 rsync
の使用も検討する必要があります 代わりは。 rsync
送信側と受信側のデータを diff メカニズムで比較するため、以前に送信されたデータを再送信する必要はありません。
何かをリモート マシンに複数回コピーする場合は、rsync
を使用します。 .実際には rsync
を使うと良いです ファイルのアクセス許可と所有権をコピーしたり、特定のファイルやディレクトリを除外したりするなどの制御が強化されているためです。一般的に:
$ rsync -av /local/dir/ server:/remote/dir/
ローカル ディレクトリをリモート ディレクトリと同期します。 2 回目に実行しても、ローカル ディレクトリの内容が変更されていない場合、データは転送されません。scp
を実行するよりもはるかに効率的です。 毎回すべてをコピーします。
また、rsync
scp
とは異なり、中断された転送から非常に簡単に回復できます .
最後に、rsync
の最新バージョン デフォルトでは ssh で実行されるため、scp
の場合 rsync
はすでに動作しています ドロップインの代替品になるはずです。
解決策 3:
それが -r
です オプションです。 :)
詳細については、必要に応じて scp の man ページを参照してください。
解決策 4:
再帰コピー オプション '-r' (小文字)
scp -r
これは、通常のローカル再帰コピー オプション '-R' (大文字) と混同しています
cp -R
解決策 5:
最善の方法は、SSH 経由で rsync を使用することです
rsync -a -essh /source/ [email protected]:/dest/
rsync -a -essh [email protected]:/source/ /dest/
私のお気に入りのオプションは -Pazvessh --delete です:
- -a :アーカイブ モード (シンボリック リンクの保持を含む、多くのデフォルトの共通オプションを含む)
- -z :圧縮
- -v :詳細:ファイルを表示
- -P :進行状況を完了したファイル/残りのファイルとして表示
- -e ssh :ssh プロトコルで rsync を実行します
- --delete :ソースに存在しなくなった宛先のファイルを削除します