提取不包含特定文件夹及其内容的tar存档

时间:2016-03-31 09:31:09

标签: php linux tar

使用php我使用exec("tar -xf archive.tar -C /home/user/target/folder")将特定存档(archive.tar)的内容提取到目标目录(/ home / user / target / folder)中,以便目标目录的所有现有内容都将被归档中包含的新内容覆盖。

它工作正常,目标目录中的所有文件在提取后都被覆盖,但是存档中有一个我想要省略的目录(从提取并因此覆盖目标文件夹中的现有目录)... 例如,archive.tar包含:

folderA /

FolderB中/

folderC /

folderD /

fileA.php

fileB.php

fileC.xml

如何提取(和覆盖)所有EXCEPT(例如)folderC /?换句话说,我希望folderC及其内容在用户的目录中保持不变,不会被tar存档中包含的内容覆盖。

有什么建议吗?

(托管服务器上的Tar是GNU ver 1.23)

4 个答案:

答案 0 :(得分:2)

您可以使用' - 排除'省略文件夹:

tar -xf archive.tar -C /home/user/target/folder" --exclude="folderC"

答案 1 :(得分:0)

id customer amount kind 1 123 15 g 2 123 30 op 3 234 20 g 4 345 25 g 5 456 12 g 6 456 15 op 工具中有--exclude PATTERN个选项。校验: tar on linuxcommand.org

答案 2 :(得分:0)

在tar命令的开头写--exclude='./folder'。在你的情况下 exec("tar -x --exclude='./C' -f archive.tar -C /home/user/target/folder")

答案 3 :(得分:0)

为了安全起见,您可以从文件夹中删除所有写入权限。例如:

$ chmod 000 folderC/

然后执行普通的tar提取(作为普通用户)。您将在控制台上收到一些错误消息,但您的文件夹将保持不变....在tar的末尾,更改您的文件夹原始权限。例如:

$ chmod 775 folderC/

当然'--exclude'tar选项是解决这一特定问题的正确方法,但是,如果您不完全100%确定命令语法,并且正在处理关键数据,我的解决方案让你安全: - )。