PC間で多くのファイルを転送する必要があります(両方ともLinux)。 scp
を使用したいのですが、scp
では一度に1つのファイルしか転送できません。
これどうやってするの?
私が持っています
可能であれば、帯域幅を節約するために透過的にgzipとungzipを行います!
これは可能ですか?
tar
を使用:
tar cvzf - -T list_of_filenames | ssh hostname tar xzf -
そのためにscpを使用したいのですが、scpでは一度に1つのファイルしか転送できません。
私はそれが正しくないことを確信しています。少なくとも、ほとんどのLinuxディストリビューションに含まれているOpenSSHによって提供されるscp
コマンドについてはそうではありません。
scp file1 file2 ... fileN user@Host:/destination/directory/
をかなり頻繁に使用しています。
透過的圧縮の場合、SSHプロトコルにはこれが組み込まれており、コマンドラインで-C
オプションを指定すると、scp
がそれを使用できます。同様の小さなファイルがたくさんある場合、scp
が各ファイルを個別のエンティティとして圧縮するようなファイル間の類似性を利用できるため、akiraによって提案されたtar + gzオプションがより良い圧縮を得ることがわかります。部分的な転送を再開する方が簡単なので(または、この状況では質問者にオプションがないことを知っていますが)、一般的にscpを使用することを好みますrsync
再開と共有がさらに簡単なのでtar + gzオプションのストリーム全体の圧縮の利点。
しないscp -r yourdir otherhost:/otherdir
仕事?
次にこれを試してください:
tar cfz - . | ssh otherhost "cd /mydir; tar xvzf -"
tarへのz
-フラグは圧縮を行います。または、-Cを使用してsshできます。
tar cf - . | ssh -C otherhost "cd /mydir; tar xvf -"
RHEL5では、特殊文字(スペースなど)を含むファイルのリストを安全にコピーするために私が知っている唯一の方法は次のとおりです。シェルスクリプトを作成し、以下を含めます。
FILE="/path/filename"
while read line; do
scp "$line" username@servername:/destination/
done < $FILE
面倒なことなくできます。
私は単純に、各ファイルの横にホスト名を含むファイルのリストを作成し、scpはそれをうまく解析しているようです。すなわち。
srchost=`hostname`
myfiles="${srchost}:~/.bashrc ${srchost}:~/.bash_profile ${srchost}:~/.vimrc ${srchost}:~/.viminfo ${srchost}:~/.toprc ${srchost}:~/.dir_colors"
scp -v $myfiles $HOME
Scpはこの構文で正常に動作するようです。各ファイルの横にホスト名なしでそれを試みたので、最初のファイルの後で失敗しました。以前に使用した別の構文を思い出したようで、見つけたら投稿します。