2014-06-20 66 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

這將工作,對吧?

相關問題