如何使用TAR归档时去除路径

nev*_*int 23 unix linux tar archive

我有一个文件,其中包含我想用tar存档的文件列表.我们称之为mylist.txt

它包含:

/path1/path2/file1.txt
/path1/path2/file3.txt
...
/path1/path2/file10.txt
Run Code Online (Sandbox Code Playgroud)

我想要做的是将此文件存档到tarball中但不包括在内/path1/path2/.目前通过这样做:

tar -cvf allfiles.tar -T mylist.txt
Run Code Online (Sandbox Code Playgroud)

取消归档后保留路径.

我试过这个但是也不行:

tar -cvf -C /path1/path2 allfiles.tar -T mylist.txt
Run Code Online (Sandbox Code Playgroud)

它将所有文件归档到/path1/path2甚至不在mylist.txt中的文件

有办法吗?

hov*_*yan 35

在"提取阶段"中,您可以使用strip-components标记

tar xvf tarname.tar --strip-components=n
Run Code Online (Sandbox Code Playgroud)

这将删除文件名的前n个前导组件.虽然如果您有不同的文件路径组件,但这并不适用于所有情况.

如果你想在归档时这样做,我只想到一件事,我会分享

INPUT:文件列表+完整路径

1)对于每一行,将路径拆分出文件名

2)执行cd到该路径并在该文件名上tar

3)重复每一行

  • 谢谢.我知道`strip-components`.但是仍然喜欢在存档时剥离. (15认同)
  • 请注意,如果您尝试指定通配符,则“-C”参数不起作用。如果你在“/home/me/images”中有一堆图像,并且尝试“tar -czf mypictures.tar.gz -C /home/me/images *.jpg”,它将失败(shell扩展会在之前扩展通配符) tar 命令已运行,因此它会填充当前目录中的所有 .jpg 文件)。 (4认同)
  • “cd & tar,然后 cd & tar”听起来很像 [gnu.org 上有关“更改工作目录”的 tar 手册](http://www.gnu.org/software/tar/manual) 中的示例/html_node/directory.html) 在命令行的“中间”使用 -C 来 cd 并从该目录添加以下文件,其中包含多个 -C 和更多文件,全部添加到 tar 的“根”。甚至可以将“-C/path”行放入“--files-from”文件列表中 (2认同)
  • @Xen2050 解决了这个问题。`tar -cf output.tar -C /path/to target_directory` 做了我需要的事情。谢谢! (2认同)