解压 tar 而不创建新目录,仅将新文件从 tar 合并到现有目录结构中

Posted

技术标签:

【中文标题】解压 tar 而不创建新目录,仅将新文件从 tar 合并到现有目录结构中【英文标题】:Unpack a tar without creation of new directories, only merge new files from tar into existing directory structure 【发布时间】:2016-12-22 10:06:59 【问题描述】:

情况:

让我们提一下有一个 tar 文件,其结构如下:

目录 A 文件 1 目录 B 文件 2 目录 C 文件 3

在我的磁盘上有一个目录,其结构如下:

目录 A 文件 1 ...(更多文件和文件夹) 目录 B ... (文件和文件夹,但不是 FILE 2)

问题:

有没有办法实现 unpack 命令不创建新目录(= 不存在于 unpack 位置的目录将被跳过/排除)并且已经存在的文件不会被替换?

解压后的磁盘结构应该是这样的:

目录 A 文件 1 (不被 tar 替换) ...(更多文件和文件夹) 目录 B 文件 2 (来自 tar,因为它以前不存在) ... (更多文件和文件夹,但不是 FILE 3)

(请注意不要创建 DIR C)

更新

我已经发现“--skip-old-files”实现了在解包时不会替换旧/现有文件。

【问题讨论】:

【参考方案1】:
for d in $(ls -d /home/bob/*/); do tar -x -k -f /tmp/test.tar  $d/* ; done

其中$(ls -d /home/bob/*/) 仅列出目标上的目录,-k 保留现有文件

【讨论】:

这个解决方案对我有用,我只需要添加 -P 选项来保留绝对路径。谢谢!

以上是关于解压 tar 而不创建新目录,仅将新文件从 tar 合并到现有目录结构中的主要内容,如果未能解决你的问题,请参考以下文章

linux下如何解压文件

Centos压缩&解压

linux怎么安装tar.gz

linux下使用tar命令

linux下使用tar命令

linux下使用tar命令