そのため、リモートファイルサーバー(別の状態)で再帰scpを実行し、リモートWebディレクトリにリンクの無限ループが作成されました。
http://www.linuxquestions.org/questions/linux-general-1/recursive-scp-wo-following-links-658857/巨大なtarファイルを作ってみることができるそうです。しかし、問題があります。オフィスのLinuxボックスで再帰scpを実行し、すべてのファイルをFAT32形式の外付けハードドライブにコピーしています(UNIXとWindowsで利用可能なものが必要なため)。 FAT32は大容量ファイルサイズをサポートしていません。だから何か他のものを試す必要がありました。
rsyncオプションもありますが、私のオフィスのLinuxボックスは非常にプリミティブなので、rsyncはありません...
答え1
scp
ハードリンクまたはソフトリンクを正しく処理できず、ストリームが圧縮されないため、大きなファイルツリーを転送するために直接使用しないことをお勧めします。
私はcpio
すぐに(オフ)圧縮をお勧めします:
ssh user@host "cd /path/to/files && find . | cpio -ov | bzip2 -c" | bunzip2 -c | cpio -ivd
また、find
「ファイルは4G未満でなければなりません」などの他の条件も処理できます。
find . -size -4G | ...
cpio
よりスペースにやさしいものにするには(ファイル名のスペースを適切に処理する)、次のようにします。
find . -print0 | cpio -0 -ivd | ...
答え2
別のオプションは、次のようsftp -r
に使用することです。sftp
このマニュアルには次のように記載されています。
アップロードおよびダウンロード時にディレクトリ全体を繰り返しコピーします。 sftpは、ツリーナビゲーション中に見つかったシンボリックリンクに従いません。
だから
sftp -r source@surce_server.com:/source/dir .
まさにあなたがやりたいことです。
答え3
送信する前にtarファイルを作成する必要はありません。即座に作ることができます:
cd /source/dir
tar -cf - . | ssh 'cd /destination/directory && tar -xf -'
これを行うには、リモートサーバーがscp接続だけでなくSSHシェル接続も許可する必要があります。理論的には、ローカルファイル構造と一致しない任意のファイルツリーをリモート側に送信することは可能ですが、これを行うための既存のツールはありません。
シンボリックリンクが問題の場合、ソースツリーがハードリンクをサポートするファイルシステム(したがって、デフォルトのUnixファイルシステムまたはNTFSですが脂肪ではありません)。ここでは、GNUユーティリティを使用すると仮定します。
cd /source/dir
mkdir ../regular-files-only
cp -al . ../regular-files-only
find ../regular-file-only \! -type f \! -type d -delete
sftpを使用することもできます。sftp -r
とは異なり、シンボリックリンクはフォローしませんscp -r
。