将 tar 中的文件直接提取到新的 tar 中

将 tar 中的文件直接提取到新的 tar 中

我有一个tar.gz完整的系统(基本上tar czpf --one-file-system /mnt/usb/backup.tar.gz -C / .)。

我希望最终得到一个新tar.gz文件,它只是子文件夹()的内容./home,但保留了所有属性。

我可以使用 tar 提取感兴趣的文件,然后重新压缩提取的文件夹。

mkdir tmp && cd tmp
sudo tar xzpf /mnt/usb/backup.tar.gz ./home --strip-components 2
sudo tar czpf home.tar.gz *

但是,这存在与p标志(保留权限)和其他文件属性相关的问题。它还需要足够的额外存储空间来保存整个目录。

我已经看到了重新创建一个排除指定文件的新 tar。可以重新利用它排除/删除除所需文件之外的所有文件,但这似乎有些过度。我寻找了一个include选项,但似乎这不是我想要的。它仅适用于文件系统上的文件,而不是用于过滤 tar 流。

我看到后就尝试过bsdtar这个技巧这个建议,但我无法完全获得我想要的输出文件夹结构。

bsdtar czf home.tar.gz --include ./home --strip-components 2 @/mnt/usb/backup.tar.gz
tar tzf home.tar.gz | head
./home/cameron/... # I want "cameron/..." (or "./cameron/..."). "strip-components" doesn't seem to work.

相关内容