我在文件夹 /dir1/dir2/ 中有一个 test.tar,我想将 test.tar 中的文件夹提取到目录 /dir1/dir2/ 中。我的 test.tar 的结构
test.tar
|tdirX/
|tdirY/
|tdirZ/
等等。
现在我想将文件夹 tdirX - tdir Y,... 提取到 /dir1/dir2/ 而不提取 test.tar/tdirZ
仅供参考:我正在运行 SunOS 5.8
答案1
手册tar(1)
在我的 Solaris 11.4-beta 系统上指出
文件名替换通配符不能用于从存档中提取文件。
...然后建议使用
tar xvf test.tar $( tar tf test.tar | grep '^tdir[XY]' )
反而。这将列出存档的内容并 grep 查找dir[XY]
在行开头匹配的行。
事实上,它建议
tar xvf test.tar `tar tf test.tar | grep '^tdir[XY]'`
但这是同一件事,除非你的 shell 太古老而无法理解$(...)
。
这感觉有点像黑客(例如,如果任何目录包含空格,它就会中断),在这种情况下我可能只使用
tar xvf test.tar tdirX
tar xvf test.tar tdirY
这假设当前工作目录是/dir1/dir2
并且存档位于同一目录中。
答案2
不确定我完全遵循你想要做的事情。但是,您可能会发现使用 tarball 的内容创建一个文件很有用。 IE: tar tf test.tar > /tmp/listing_of_test-tar.txt
。您甚至可以在文件创建之前或之后通过 grep 或 sed 对其进行管道传输,以满足您的需求。
然后,您可以创建一个单独的文件以使用 tar 的 -I 包含选项或 -X 排除选项。