如何使用tar提取文件夹结构的文件

我有一个tar.gz文件,结构如下:

folder1/img.gif
folder2/img2.gif
folder3/img3.gif

我想提取没有文件夹层次结构的图像文件,因此提取的结果如下所示:

/img.gif
/img2.gif
/img3.gif

我需要结合使用Unix和PHP来做到这一点。 这是我到目前为止,它的作品将其提取到指定的目录,但保持文件夹层次结构:

exec('gtar --keep-newer-files -xzf images.tgz -C /home/user/public_html/images/',$ret);

您可以使用tar的--strip-components选项。

 --strip-components count
         (x mode only) Remove the specified number of leading path ele-
         ments.  Pathnames with fewer elements will be silently skipped.
         Note that the pathname is edited after checking inclusion/exclu-
         sion patterns but before security checks.

我创建一个与你的结构类似的tar文件:

$tar -tf tarfolder.tar
tarfolder/
tarfolder/file.a
tarfolder/file.b

$ls -la file.*
ls: file.*: No such file or directory

然后通过执行提取:

$tar -xf tarfolder.tar --strip-components 1
$ls -la file.*
-rw-r--r--  1 ericgorr  wheel  0 Jan 12 12:33 file.a
-rw-r--r--  1 ericgorr  wheel  0 Jan 12 12:33 file.b

除了无法删除剩余目录之外,使用--transform标志可以单独使用tar,这几乎是可能的。

这将平整整个存档:

tar xzf images.tgz --transform='s/.*///'

输出将是

folder1/
folder2/
folder3/
img.gif
img2.gif
img3.gif

不幸的是,您将需要用另一个命令删除目录。


检查tar版本,例如

$ tar --version

如果版本大于= tar-1.14.90,则使用--strip-components

tar xvzf web.dirs.tar.gz -C /srv/www --strip-components 2

否则使用--strip-path

tar xvzf web.dirs.tar.gz -C /srv/www --strip-path 2
链接地址: http://www.djcxy.com/p/60863.html

上一篇: How do I extract files without folder structure using tar

下一篇: Excluding directory when creating a .tar.gz file