当文件存储在不同目录中时创建不包含父目录的 tar 存档

Mar*_*tin 11 tar

我在文件系统中有以下四个文件:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5
Run Code Online (Sandbox Code Playgroud)

我需要将这些文件放入 tar 存档,但我不想添加目录。我能想到的最好的是:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5
Run Code Online (Sandbox Code Playgroud)

这仍然不完美,因为存档中的每个文件都有两个目录深。有没有更好的办法?还是我只需要复制s1s2r3r5文件到一个目录下,并创建归档tar -czvf archive.tgz s1 s2 r3 r5

Ste*_*itt 18

您可以-C多次使用(从一个目录移动到另一个目录):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5
Run Code Online (Sandbox Code Playgroud)

请注意,每个-C选项都相对于当时的当前目录进行解释(或者您可以只使用绝对路径)。


mur*_*uru 11

如果您在文件中有文件列表,或者可以使用命令生成它们,则可以使用单个 GNU tar 命令:

tar cf foo.tar -T list-of-files --transform 's:.*/::'
Run Code Online (Sandbox Code Playgroud)

转换仍然保留目录,但完全扁平化布局。所以你需要一些过滤目录的方法,因此需要一个文件列表。


jan*_*nos 8

您可以将文件一一附加到存档中:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5
Run Code Online (Sandbox Code Playgroud)

您可以编写脚本以使其更容易:对于每个路径,tar rf使用基本目录作为-C参数值和基本文件名运行,无需添加路径。