我创建了一些.tar
文件夹,其中大部分包含一些文本文件。是否可以在不完全解压缩 tar 的情况下从命令行(bash
和相关工具(以编程方式编辑文本文件?
上下文:这些.tar
是由脚本创建的,我意识到我犯了一个错误。我正在寻找最有效和最简单的解决方案来编辑文本文件单行的一部分。
您可以使用tar --delete
和tar --update
来替换tar中的文件
感谢格莱美的灵感,这里有一个最小的例子,以防有人来寻找同样的东西。 在文件夹中创建一些数据:
cd /tmp;
mkdir dir1;
echo "foo" >> ./dir1/test_txt;
echo "bar" >> ./dir1/test_txt;
用焦油包装:
tar -cf test_tar.tar dir1;
删除我们要解压缩和编辑的目录。
rm -rf dir1;
并仅从tar文件夹中解压缩相关文件并编辑:
警告:
Tar 仅在自上次编辑以来时间戳发生变化时才更新!
这就是为什么这里有一个睡眠命令(更改时间戳(。
sleep 1
tar -xf test_tar.tar dir1/test_txt
sed -i 's/foo/baar/' dir1/test_txt ;
更新相关文件。
tar -uf test_tar.tar dir1/test_txt
检查这是否有效:
tar -xf test_tar.tar dir1
cat ./dir1/test_txt
[...]$
baar
bar
我认为如果不进行解压缩,您将无法做到这一点。您可以执行循环以仅解压缩文本文件,使用 sed 进行编辑并再次压缩。在其他情况下,我认为这是不可能的...
也许像这样
xzcat blah | sed /../../ | xz blah
在贯穿所有文件的循环中