2012-09-21 171 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中(但没有通向它的路径)。