2012-09-21 94 views
2

我想通過PHP在我的服務器上創建一個tar存檔,如下所示:tar文件保留完整路徑。如何阻止它?

exec('tar -cvf myfile.tar tmp_folder/innerfolder /');

它工作正常,但保存的文件保留完整路徑,包括tmp_folder/innerfolder/ 我正在爲用戶創建這些動態內容,因此用戶在提取時有此路徑有點不可用。我已經回顧了這個話題 - How to strip path while archiving with TAR,但是在這個解釋中,這個人並沒有舉一個例子,我也不太明白該怎麼做。

請告訴我一個例子,如何將文件添加到tar中的方式,它不會保留檔案中的'tmp_folder/innerfolder /'部分?

在此先感謝

+0

去那個目錄 –

回答

3

你可以欺騙..

exec('cd /path/to/tmp_folder/ && tar -cvf /path/to/myfile.tar innerfolder/'); 

這將使您的用戶只是當他們提取的壓縮包

+0

這一個工作。前一個沒有。非常感謝你們! –

12

使用-c選項,以焦油innerfolder:

tar -C tmp_folder/innerfolder -cvf myfile.tar . 
0
tar czf ~/backup.tgz --directory=/path filetotar 
0

如果你想保留當前目錄的名稱,但不是它的完整路徑,嘗試這樣的事情(內從執行你想tar的目錄;假設bash/zsh):

ORIGDIR=${PWD##*/} 
tar -C `dirname $PWD` -cvf ../archive.tar $ORIGDIR 

下面是一些細節;第一個:

ORIGDIR=${PWD##*/} 

..存儲當前目錄名稱(即您所在目錄的名稱)。然後,在tar命令:

-C `dirname $PWD` 

..切換從標準根(「/」)到要存檔的文件夾的父焦油的「工作目錄」。奇怪的是,-C開關隻影響構建存檔的路徑,而不影響檔案本身存儲的位置。因此,您仍然必須在存檔名稱的前面加上「../」,否則tar會將它在你啓動命令的文件夾中。最後,$ ORIGDIR是相對於父目錄的,所以它和它的內容被遞歸存檔到tar中(但沒有通向它的路徑)。