MvG*_*MvG 15 linux permissions tar ownership timestamp
我观察到 tar 1.26 和 1.27.1 的以下行为:
$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b -xvf test.tar diffowner
diffowner/
diffowner/foo
tar: diffowner: Cannot utime: Operation not permitted
tar: diffowner: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
所以我在这里尝试做的是将一个 tar 文件提取到现有的目录结构中,在那里我不是所有相关目录的所有者,但我对所有目录都有写权限。事实上,它们是在一个组中共享的。
我不关心时间戳,我相信权限应该已经正确了。我以普通用户的身份运行它,所以它不应该尝试,--preserve-permissions除非被告知,我没有这样做。真正让我担心的是退出状态:我打算在脚本中使用它,并想知道实际提取是否正常工作。
是否有 tar 选项告诉它不要立即或延迟设置目录权限?否则,您会建议什么其他解决方案。现在我正在考虑提取到临时目录并使用rsync将内容移动到现有树中。但也许你知道一种不那么骇人听闻的方法。
ter*_*don 24
此tar选项可能是您正在寻找的:
--no-overwrite-dir
preserve metadata of existing directories
Run Code Online (Sandbox Code Playgroud)
我测试如下:
$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b --no-overwrite-dir -xvf test.tar diffowner
diffowner/
diffowner/foo
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)