在使用“tar”归档文件夹之前修改文件夹的所有文件

在使用“tar”归档文件夹之前修改文件夹的所有文件

$DIR考虑其中包含文件和文件夹的任意文件夹。我想将此文件夹 TAR 到$DIR.tar,但在此之前,作为预备步骤,我想在所有文件中更改文件内容中出现FOO的字符串。BAR

具体来说:更改不应影响 中的文件$DIR,它应该只体现在$DIR.tar

在 GNU/ 中可以做到这一点吗bash

$DIR我可以通过分别创建、sedit 和it的副本来做到这一点tar。我希望有一个内存解决方案。

答案1

当然,最简单的解决方案是复制目录,然后进行修改,然后进行taring。如果您执行此操作的文件系统是 Btrfs、CIFS、NFS 4.2、OCFS2、overlayfs 或 XFS,那么在磁盘空间(除了更改的块)和时间方面基本上是免费的,如下所示这些reflink支持,即复制文件实际上并不复制文件的内容。仅当内容发生更改时,才会制作原始数据范围的副本。使用cp --reflink=always

由于 GNUtar无法从文件以外的任何内容获取输入,并且如果您指定一个文件,则该文件的路径将很重要,因为它反映了存档中的路径,恐怕您将无法执行此操作它以任何其他方式使用tar

我希望有一个内存解决方案。

迄今为止最简单的方法是选择一种对您来说合理可用的脚本语言,并自己构建存档而不是依赖于程序tar。例如,Python 附带tarfile模块;即使对于 Python 初学者来说,它也很容易使用。有很多答案都包含这个内容,一些可能对您的解决方案有帮助。不过还没有检查过它们。

相关内容