我正在尝试通过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中?
提前致谢
答案 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中(但没有通向它的路径)。