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


11

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

/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

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

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

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

Answers:


17

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

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

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


11

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

tar cf foo.tar -T list-of-files --transform 's:.*/::'

转换仍然保留目录,但是完全放宽了布局。因此,您需要某种方式来过滤目录,因此需要文件列表。


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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.