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

当文件存储在不同目录中时创建不包含父目录的 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

我需要将这些文件放入 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

答案1

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

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

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

答案2

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

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

转换仍然保留目录,但完全展平布局。因此,您需要某种过滤目录的方法,因此需要文件列表。

答案3

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

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和基本文件名运行,无需添加路径。

相关内容