我的文件系统中有以下四个文件:
/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
这仍然不完美,因为存档中的每个文件都有两个目录深。有没有更好的办法?或者我只需将s1
、s2
、r3
和r5
文件复制到一个目录中并使用 来创建存档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
和基本文件名运行,无需添加路径。