tar文件保留完整路径。怎么阻止它?

时间:2012-09-21 14:35:24

标签: php tar

我正在尝试通过PHP在我的服务器上创建一个tar存档,如下所示:

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

它工作正常,但保存的文件保留完整路径,包括tmp_folder / innerfolder / 我正在为用户动态创建它们,因此用户在提取时使用此路径有点无法使用。我已经回顾了这个主题 - How to strip path while archiving with TAR,但在解释中,这个人没有给出一个例子,我不太明白该怎么做。

请告诉我一个例子,如何以不保留存档中'tmp_folder / innerfolder /'部分的方式将文件添加到tar中?

提前致谢

5 个答案:

答案 0 :(得分:13)

使用-C选项tar:

tar -C tmp_folder/innerfolder -cvf myfile.tar .

答案 1 :(得分:3)

你可以作弊..

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

这会在你提取tarball时为你的用户提供内部文件夹

答案 2 :(得分:2)

您可以使用--transform

tar -cf files.tar --transform='s,/your/path/,,' /your/path/file1 /your/path/file2
tar -tf files.tar
file1
file2

更多信息:http://www.gnu.org/software/tar/manual/html_section/transform.html

答案 3 :(得分:0)

tar czf ~/backup.tgz --directory=/path filetotar

答案 4 :(得分:0)

如果要保留当前目录名但不保留其完整路径,请尝试这样的操作(从您想要tar的目录中执行;假设为bash / zsh):

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

这里有一些细节;第一:

ORIGDIR=${PWD##*/}

..存储当前目录名称(即您所在目录的名称)。然后,在tar命令中:

-C `dirname $PWD`

..将tar的“工作目录”从标准根目录(“/”)切换到要存档的文件夹的父目录。奇怪的是,-C开关只会影响构建存档的路径,但不会影响存档本身的存储位置。因此,您仍然必须在存档名称前加上“../”,否则tar将放置它在你启动命令的文件夹中。最后,$ ORIGDIR是相对于父目录的,所以它和它的内容被递归地存档到tar中(但没有通向它的路径)。