关于tar:两个远程主机之间的tarring和untarring


tarring and untarring between two remote hosts

我有两个系统要在它们之间进行分离处理,我正在尝试找到在这两个系统之间移动数据的最有效方法。我已经了解了如何将tar和gzip放到第一个服务器("servera")上的一个归档文件中,然后使用rsync复制到远程主机("serverb")。但是,当我在那里解开/解压缩数据时,它会保存归档文件,包括原始服务器的完整路径名。因此,如果在服务器A上,我的数据位于:

1
/serverA/directory/a/lot/of/subdirs/myData/*

并且,使用以下命令:

1
tar -zcvf /serverA/directory/a/lot/of/subdirs/myData-archive.tar.gz /serverA/directory/a/lot/of/subdirs/myData/

在mydata-archive.tar.gz中,已成功对…/mydata中的所有内容进行tarred和zipped。

但是,复制存档后,当我尝试在第二台主机上解开/解压缩(我手动登录此处完成处理,第一步是解开/解压缩)时,使用以下命令:

1
tar -zxvf /serverB/current/directory/myData-archive.tar.gz

它会将当前目录(serverb/current/directory/)中的所有内容都解开,但看起来如下:

1
/serverB/current/directory/serverA/directory/a/lot/of/subdirs/myData/Data*ext

我应该如何制定这两个tar命令,以便我的数据最终出现在一个名为

1
/serverB/current/directory/dataHERE/

我知道我需要-c标志将其解压缩到另一个目录中(在我的例子中是/serverb/current/directory/datahere),但我仍然不知道如何使其成为一个目录,以便在归档文件未被删除时不包括整个路径。我看到过类似的帖子,但没有一篇讨论过如何在不同的主机之间切换时做到这一点。

更新:根据此问题中的一个答案,我将命令更改为:

  • 服务器a上的tar/zip:

    1
    tar -zcvf /serverA/directory/a/lot/of/subdirs/myData-archive.tar.gz serverA/directory/a/lot/of/subdirs/myData/ -C /serverA/directory/a/lot/of/subdirs/ myData
  • 并且,解开/解开:

    1
    tar -zxvf /serverB/current/directory/myData-archive.tar.gz -C /serverB/current/directory/dataHERE
  • 现在,它不仅可以将数据解压缩到:

    1
    /serverB/current/directory/dataHERE/

    就像我想要的,但它也把数据的另一个副本放在这里:

    1
    /serverB/current/directory/serverA/directory/a/lot/of/subdirs/myData/

    我不想要。我需要如何修复我的命令,使它只把数据放在第一位?


    在一些更多的梅辛左右,我想到如何实现,我想: </P >

    对焦油的servera: </P >

    1
    tar -zcvf /serverA/directory/a/lot/of/subdirs/myData-archive.tar.gz -C /serverA/directory/a/lot/of/subdirs/ myData

    然后到解压是serverb: </P >

    1
    tar -zxvf /serverB/current/directory/myData-archive.tar.gz -C /serverB/current/directory/dataHERE

    serverA做 </P >

    1
    ( cd /serverA/directory/a/lot/of/subdirs; tar -zcvf myData-archive.tar.gz myData; )