我正在开发一个程序更新机制,它基本上使用PHP脚本来查找一组文件的最新版本,并创建这些文件的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 ...
完整路径,但最终的归档结构只是反映了我放入的内容(/ updates /...).
有关如何执行此操作的任何建议?谢谢!
答案 0 :(得分:1)
将路径名拆分为版本前缀,其余部分。然后做:
tar rv -C "$prefix" -f "$tarfile" "$rest"
-C $prefix
选项在归档cd $prefix
之前执行$rest
,因此您只获得相对于该目录的路径名。
使用r
选项代替c
,{{1}}附加到现有存档,而不是从头创建新存档。这将允许您遍历所有文件名,获取每个前缀,并将它们添加到存档。
答案 1 :(得分:0)
如何将dir更改为/ updates,然后将每个目录(即ls
中的d)更改为该目录并附加到现有tar,并覆盖tar中的现有文件?即。 tar Auvf update.tar
这会奏效,对吧?