Answers:
GNU焦油依赖于胎儿炎,因此自然也有一些选择。
http://www.gnu.org/software/tar/manual/html_node/transform.html
如果你只是想删除一些路径段,然后--strip-components=n
还是--strip=n
会经常做的事:
tar xvzf tgz --strip=1
但是也可以对要提取的文件进行正则表达式重写(标记是--transform
or,--xform
并使用/x
modifer 接受ereg ):
tar xvzf tgz --xform='s#^[^/]+#.#x'
# or 's#^.+/##x' for discarding all paths
要列出tar,您需要其他--show-transformed
选项:
tar tvzf tgz --show-transformed --strip=1 --xform='s/abc/xyz/x'
我相信重写选项还可以用于打包,而不仅仅是提取。但是pax
显然有更好的语法。
s#.*/##
呢?
--strip
在os x tar手册页中未提及,但是仍然可以运行,谢谢!
--strip
和之间有什么区别--strip-components
?
您可以分两步轻松完成此操作。根据需要进行调整:
$ mkdir /tmp/dirtree
$ tar xfz /path/to/archive -C /tmp/dirtree
$ find /tmp/dirtree -type f -exec mv -i {} . \;
$ rm -rf /tmp/dirtree
find -exec mv -i
而不是find | xargs
)。...我可以在任何系统上重复执行这些简单步骤,而无需携带脚本为我做。
tmpdir=$( mktemp -d )
在创建临时目录时非常方便
可能不需要安装任何东西的解决方案。
tar tvf
来从tarball抓取所有文件分别提取这些文件-将tar提取到stdout并重定向到$ filename
tar -tvf $1 | grep -v "^d" | \
awk '{for(i=6;i<NF+1;i++) {printf "%s ",$i};print ""}' |\
while read filename
do
tar -O -xf $1 "$filename" > `basename "$filename"`
done
保存为extract.sh并运行为extract.sh myfile.tar
。它还会覆盖从压缩包中拉出的目录中遇到的所有重复文件名。