使用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)
答案 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%确定命令语法,并且正在处理关键数据,我的解决方案让你安全: - )。