提取 tar 存档,不包括特定文件夹及其内容
Extract tar archive excluding a specific folder and its contents
使用 PHP 我正在使用 exec("tar -xf archive.tar -C /home/user/target/folder")
将特定存档 (archive.tar) 的内容提取到 target 目录 (/home/user/target/folder) , 这样 target 目录的所有现有内容将被存档中包含的新内容覆盖。
它工作正常,target 目录中的所有文件在解压后都被覆盖,但我想忽略存档中的一个目录(从解压并因此覆盖现有的目录) target 文件夹)...
例如,archive.tar 包含:
文件夹A/
文件夹B/
文件夹C/
文件夹D/
fileA.php
fileB.php
fileC.xml
我如何提取(并覆盖)所有 除了 (例如)folderC/
?换句话说,我希望 folderC 及其内容在用户目录中保持完整,而不是被 tar 存档中包含的内容覆盖。
有什么建议吗?
(托管服务器上的Tar 是 GNU 1.23 版。)
tar
工具中有--exclude PATTERN
选项。
您可以使用“--exclude”来省略文件夹:
tar -xf archive.tar -C /home/user/target/folder" --exclude="folderC"
在tar命令的开头写--exclude='./folder'
。
在你的情况下,
exec("tar -x --exclude='./C' -f archive.tar -C /home/user/target/folder")
为了安全起见,您可以取消该文件夹的所有写入权限。例如:
$ chmod 000 folderC/
然后执行正常的 tar 提取(作为普通用户)。您将在控制台上收到一些错误消息,但您的文件夹将保持不变....在 tar 结束时,更改回您的文件夹原始权限。例如:
$ chmod 775 folderC/
当然,'--exclude' tar 选项是解决此特定问题的正确方法,但是,如果您不是 100% 完全确定命令语法,并且您正在处理 critical 数据,我的解决方案让你安全:-).
使用 PHP 我正在使用 exec("tar -xf archive.tar -C /home/user/target/folder")
将特定存档 (archive.tar) 的内容提取到 target 目录 (/home/user/target/folder) , 这样 target 目录的所有现有内容将被存档中包含的新内容覆盖。
它工作正常,target 目录中的所有文件在解压后都被覆盖,但我想忽略存档中的一个目录(从解压并因此覆盖现有的目录) target 文件夹)...
例如,archive.tar 包含:
文件夹A/
文件夹B/
文件夹C/
文件夹D/
fileA.php
fileB.php
fileC.xml
我如何提取(并覆盖)所有 除了 (例如)folderC/
?换句话说,我希望 folderC 及其内容在用户目录中保持完整,而不是被 tar 存档中包含的内容覆盖。
有什么建议吗?
(托管服务器上的Tar 是 GNU 1.23 版。)
tar
工具中有--exclude PATTERN
选项。
您可以使用“--exclude”来省略文件夹:
tar -xf archive.tar -C /home/user/target/folder" --exclude="folderC"
在tar命令的开头写--exclude='./folder'
。
在你的情况下,
exec("tar -x --exclude='./C' -f archive.tar -C /home/user/target/folder")
为了安全起见,您可以取消该文件夹的所有写入权限。例如:
$ chmod 000 folderC/
然后执行正常的 tar 提取(作为普通用户)。您将在控制台上收到一些错误消息,但您的文件夹将保持不变....在 tar 结束时,更改回您的文件夹原始权限。例如:
$ chmod 775 folderC/
当然,'--exclude' tar 选项是解决此特定问题的正确方法,但是,如果您不是 100% 完全确定命令语法,并且您正在处理 critical 数据,我的解决方案让你安全:-).