我如何创建一个tar.gz
来自
- 完整路径文件列表(例如
/root/test/abcd/123.txt
) - 包括目录和文件
- 在提取时保留文件和目录的所有权和权限?
这就是我的文件列表 ( dbfiles.log
) 的样子:
[oracle@test ~]$ cat dbfiles.log
/u01/app/oracle/product/12.2.0/dbhome_1/dbs/initDEVR.ora
/u01/app/oracle/product/12.2.0/dbhome_1/dbs/orapwDEVR
/u01/app/oracle/product/12.2.0/dbhome_1/dbs/spfileDEVR.ora
/u01/app/oracle/oradata/DEVR/control01.ctl
/u01/app/oracle/oradata/DEVR/control02.ctl
/u01/app/oracle/oradata/DEVR/redo01.log
/u01/app/oracle/oradata/DEVR/redo02.log
/u01/app/oracle/oradata/DEVR/redo03.log
/u01/app/oracle/oradata/DEVR/sysaux01.dbf
/u01/app/oracle/oradata/DEVR/system01.dbf
/u01/app/oracle/oradata/DEVR/temp01.dbf
/u01/app/oracle/oradata/DEVR/undotbs01.dbf
/u01/app/oracle/oradata/DEVR/users01.dbf
[oracle@test ~]$
这就是我今天的做法:
tar -czvf TARFILENAME.tar.gz -T dbfiles
但解压后需要手动配置权限。顺便说一句,我必须使用它sudo
来提取文件,以便目录获得所有权,而不是根据需要获取root:root
原始文件。oracle:oinstall
我发现一些参考资料表明 tar 的标志--no-recursion
可以解决这个问题:
tar -zcf file.tgz --no-recursion abc --recursion abc/def
我相信这是正确的方法,但我不确定如何在我的文件列表中使用它。也许用于find
遍历列表并将输出发送到 tarball?老实说我不确定。
答案1
为了压缩,您可以使用tar -cvpf filename.tar.gz
目录。
提取时,使用--same-owner
参数。例如tar -xvzf --same-owner filename.tar.gz
答案2
我最终找到了解决方案。这是以防其他人需要:
awk -F/ '{ d=$1; for (i=2; i <= NF; i++) { print d; d=d "/" $i }; print d }' dbfiles | awk '{ if (index(old,$0 "/") != 1) { old=$0; print } }' | tar czvf $LOCALFS/$TARFILENAME.tar.gz --no-recursion -T -
感谢谁回答了我最初的问题。