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

标签 linux bash shell scp gnu-parallel

我在远程服务器上驻留了大约 2000 个文件,每个文件大小约为 10 GB,我想从远程服务器复制所有这 2000 个文件。我可以使用 GNU parallel 并行化我的 scp 并一次并行复制 5 个文件。但是有什么方法可以将所有 2000 个文件压缩到一个 files.tar.gz 中,然后复制该 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 服务器复制。

最佳答案

不使用 scp,而是使用带有选项 -zrsync 在复制时压缩数据。

参见 https://unix.stackexchange.com/questions/70581/scp-and-compress-at-the-same-time-no-intermediate-save以获得更多解释。

关于linux - 如何在从远程服务器复制之前将所有文件压缩到一个 tar.gz 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47761608/

相关文章:

linux - 使用 find 命令删除超过特定时间的多个扩展名

linux - PID 是如何用 exec 修改的?

python find_element_by_css_selector(value) 返回 None

bash - 如何对变量进行大括号扩展?

linux - 如何在不创建新文件的情况下合并大量文件

shell - 从 Windows 命令行和 Linux shell 复制彩色文本

linux - 搜索模式并替换同一行中 = 和 ""之后的内容

linux - xargs 不适用于 replstr(替换字符串)

bash - 如何重复给定的十六进制字符串

linux - 一行命令执行多个ssh命令