如何在从远程服务器复制之前将所有文件压缩成一个tar.gz文件?

时间:2017-12-11 21:21:02

标签: linux bash shell scp gnu-parallel

我有大约2000个文件驻留在远程服务器上,每个文件大小大约10 GB,我想从远程服务器复制所有这些2000个文件。我可以使用GNU parallel来并行化我的scp,并一次将它们与5个文件并行复制。但有没有办法可以在一个files.tar.gz中对所有2000个文件进行tar,然后复制该tar.gz文件,然后复制未压缩的文件?这将减少我的复制时间,而且速度非常快。我想从我的脚本中执行此tar和untar,它将从远程服务器复制文件。

do_Copy() {
  el=$1
  PRIMSEC=$2
  df /data01 | awk 'NR>1 {gsub(/%/,""); if ($5 > 90) {exit 1}}' || { echo "exiting as we ran out of space" >&2 && exit 1; }
  scp user@"$LOCAL":"$dir3"/process_"$el"_try.data "$PRIMSEC"/. || { touch "$status_dir/local_down" && scp user@"$PRIMARY":"$dir3"/process_"$el"_try.data "$PRIMSEC"/.; } || { touch "$status_dir/primary_down" && scp user@"$SECONDARY":"$dir3"/process_"$el"_try.data "$PRIMSEC"/.; } || { touch "$status_dir/secondary_down" && exit 1; }
}
export -f do_Copy

parallel -j 5 do_Copy {} $DATA ::: ${SHARDS[@]} &
wait

在我的上述脚本中,我首先从LOCAL服务器进行复制,但如果LOCAL服务器已关闭,那么我将从PRIMARY服务器进行复制,如果该服务器已关闭,那么我将从SECONDARY服务器进行复制。

1 个答案:

答案 0 :(得分:1)

使用带有scp选项的rsync代替使用-z,以便在复制时压缩数据。

有关详细说明,请参阅https://unix.stackexchange.com/questions/70581/scp-and-compress-at-the-same-time-no-intermediate-save