复制树结构,包括叶子中的单个文件

时间:2018-06-07 11:27:16

标签: bash

在群集上运行多个模拟后,我想将结果复制回本地计算机。结果组织如下:

foo1
   |bar1
       |run1
           |file1.txt
           |file2.txt
           |results.txt
       |run2
           |file1.txt
           |file2.txt
           |results.txt
   |bar2
       |run1
           |file1.txt
           |file2.txt
           |results.txt
       |run2
           |file1.txt
           |file2.txt
           |results.txt
foo2
... (etc.)

每个run*文件夹包含运行模拟所需的几个文件,但我只想复制结果,比如说results.txt回到我的本地机器,同时保留树结构的其余部分(目录基本上指定了模拟的参数。

我现在如何才能将results.txt文件从远程复制到本地,同时保持目录的树结构?这样我本地就结束了

foo1
   |bar1
       |run1
           |results.txt
       |run2
           |results.txt
   |bar2
       |run1
           |results.txt
       |run2
           |results.txt
foo2
... (etc.)

2 个答案:

答案 0 :(得分:2)

使用find和tar:

find -name result.txt | tar cvfz results.tgz -T -

然后你需要复制tar并解压缩它:

tar xvfz results.tgz

答案 1 :(得分:1)

你可以分两个阶段完成:

find . -type f -name results.txt | xargs tar -f results.tar

这会找到名为results.txt的所有文件(-type f),然后将结果通过管道传输到tarball中。

第二阶段是scp从群集返回到本地计算机。