$DIR
考虑其中包含文件和文件夹的任意文件夹。我想将此文件夹 TAR 到$DIR.tar
,但在此之前,作为预备步骤,我想在所有文件中更改文件内容中出现FOO
的字符串。BAR
具体来说:更改不应影响 中的文件$DIR
,它应该只体现在$DIR.tar
在 GNU/ 中可以做到这一点吗bash
?
$DIR
我可以通过分别创建、sed
it 和it的副本来做到这一点tar
。我希望有一个内存解决方案。
答案1
当然,最简单的解决方案是复制目录,然后进行修改,然后进行tar
ing。如果您执行此操作的文件系统是 Btrfs、CIFS、NFS 4.2、OCFS2、overlayfs 或 XFS,那么在磁盘空间(除了更改的块)和时间方面基本上是免费的,如下所示这些reflink
支持,即复制文件实际上并不复制文件的内容。仅当内容发生更改时,才会制作原始数据范围的副本。使用cp --reflink=always
。
由于 GNUtar
无法从文件以外的任何内容获取输入,并且如果您指定一个文件,则该文件的路径将很重要,因为它反映了存档中的路径,恐怕您将无法执行此操作它以任何其他方式使用tar
。
我希望有一个内存解决方案。
迄今为止最简单的方法是选择一种对您来说合理可用的脚本语言,并自己构建存档而不是依赖于程序tar
。例如,Python 附带tarfile
模块;即使对于 Python 初学者来说,它也很容易使用。有很多答案都包含这个内容,一些可能对您的解决方案有帮助。不过还没有检查过它们。