编辑未压缩的文本文件。tar
edit a text file in an uncompressed .tar
我创建了一些 .tar
文件夹,其中大部分包含一些文本文件。是否可以从命令行(bash
和相关工具)以编程方式编辑文本文件,而无需完全解压缩 tar?
上下文:这些 .tar
是由脚本创建的,我意识到我犯了一个错误。我正在寻找最有效和最简单的解决方案来编辑文本文件单行的一部分。
我想你不解压是做不到的。你可以做一个循环来解压缩你的文本文件,用 sed 编辑并再次压缩。其他情况,我认为是不可能的...
可能是这样的
xzcat blah | sed /../../ | xz blah
在遍历所有文件的循环中
您可以使用 tar --delete
和 tar --update
替换 tar
中的文件
感谢格莱美的启发,这里是一个最小的例子,以防有人来找同样的东西。
在文件夹中创建一些数据:
cd /tmp;
mkdir dir1;
echo "foo" >> ./dir1/test_txt;
echo "bar" >> ./dir1/test_txt;
打包成 tar:
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
我创建了一些 .tar
文件夹,其中大部分包含一些文本文件。是否可以从命令行(bash
和相关工具)以编程方式编辑文本文件,而无需完全解压缩 tar?
上下文:这些 .tar
是由脚本创建的,我意识到我犯了一个错误。我正在寻找最有效和最简单的解决方案来编辑文本文件单行的一部分。
我想你不解压是做不到的。你可以做一个循环来解压缩你的文本文件,用 sed 编辑并再次压缩。其他情况,我认为是不可能的...
可能是这样的
xzcat blah | sed /../../ | xz blah
在遍历所有文件的循环中
您可以使用 tar --delete
和 tar --update
替换 tar
感谢格莱美的启发,这里是一个最小的例子,以防有人来找同样的东西。 在文件夹中创建一些数据:
cd /tmp;
mkdir dir1;
echo "foo" >> ./dir1/test_txt;
echo "bar" >> ./dir1/test_txt;
打包成 tar:
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