2014-06-20 71 views
0

我正在使用基本上使用PHP脚本来查找一组文件的最新版本的程序更新机制,并创建这些文件的tar归档。Tar多个文件和文件夹,并指定存档结构

因此,文件列表被归档可能是这样的:

/updates/0.5.1/fileOne 
/updates/0.5.1/fileTwo 
/updates/0.5.2/folderOne/fileThree 
/updates/0.5.3/folderOne/fileFour 

我想要做的就是列表中的所有文件到tar归档,需要提醒的是,该目录结构后必须保留版本文件夹(例如0.5.1/...)。所以,如果所有这些文件都被放在一个存档,存档结构应该是:

/fileOne 
/fileTwo 
/folderOne/fileThree 
/folderOne/fileFour 

我使用tar cvf ...与完整路径尝试简单,但由此产生的归档文件的结构简单地反映了什么,我把(/更新/...)。

有关如何做到这一点的任何建议?谢谢!

回答

1

将路径名拆分为版本前缀和其余部分。然后做:

tar rv -C "$prefix" -f "$tarfile" "$rest" 

-C $prefix选项归档$rest之前执行cd $prefix,所以你只要相对于该目录的路径名获得。

使用r选项而不是c,该选项附加到现有存档,而不是从头开始创建新存档。这将允许您遍历所有文件名,获取它们的每个前缀,并将它们添加到存档中。

+0

完美的,正是我所期待的。非常感谢Barmar :) –

0

如何将dir更改为/ updates,然后为每个目录(即对于ls中的d)更改为该目录并追加到现有tar,并覆盖tar中的现有文件?即。 tar Auvf update.tar

这将工作,对吧?

相关问题