仅将权限和所有权从一个 tar 文件复制到另一个 tar 文件

仅将权限和所有权从一个 tar 文件复制到另一个 tar 文件

我有两个 tar 文件,它们基本上是 android 上 /data 文件夹的备份。问题是最新备份中的文件的权限和所有权被搞乱了。然而旧版 tar 中的权限是完美的。

我想要一种方法来读取 old.tar 的权限并将更改复制到latest.tar。

我尝试使用 -p 和 --same-owner 标志将文件提取到我自己的系统,但所有权更改为root而不是system因为我的计算机没有名为 system 的用户或组,但我的 Android 手机有。我想我应该提取文件,并编写一个脚本,使用 stat 和 grep 读取权限和所有权,并在latest.tar 中设置文件的权限和所有权。但似乎并非如此。任何人都可以在这个问题上给我一些帮助。

答案1

我不确定 Tar 能做到这一点。不过,应该可以将两个备份解压(到不同的目录),然后使用类似的东西

cd /mnt/oldbackup ; 
find ./ -exec getfacl {} | setfacl /mnt/newbackup/{} 

根据联机帮助页,的输出getfacl可以用作标准输入。setfacl

答案2

无法将新的元数据放入 tar 存档中,但有一种方法可以将元数据从 tar 存档中提取到文件系统。只需致电:

star -xp -meta < archive.tar

这不会创建新文件或覆盖文件内容,而只是将元数据从存档恢复到本地文件系统中的文件。您很可能还需要 -U (请参阅星号手册页)来“即使存档中的文件不比文件系统上的文件新”。

答案3

首选答案不再起作用(find -exec已更改语法,并且setfacl需要restore=参数),并且不再需要使用find。

你应该做:

cd /mnt/oldbackup 
getfacl -R . >/tmp/permissions
cd /mnt/newbackup
setfacl --restore=/tmp/permissions

相关内容