解压 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 合并到现有目录结构中的主要内容,如果未能解决你的问题,请参考以下文章