【问题标题】:edit a text file in an uncompressed .tar在未压缩的 .tar 中编辑文本文件
【发布时间】:2018-05-03 14:28:02
【问题描述】:

我创建了一些.tar 文件夹,其中大部分包含一些文本文件。是否可以在不完全解压缩 tar 的情况下从命令行(bash 和相关工具)以编程方式编辑文本文件?

上下文:这些.tars 是由脚本创建的,我意识到我犯了一个错误。我正在寻找最有效和最简单的解决方案来编辑​​文本文件单行的一部分。

【问题讨论】:

  • 我可以想象这种不改变编辑字符串长度的编辑的可行性。例如,perl -pi -e 's/echo var1/echo var2/g' compressed.tar

标签: bash awk sed tar


【解决方案1】:

您可以使用 tar --deletetar --update 替换 tar 中的文件

【讨论】:

    【解决方案2】:

    我认为如果不解压缩,您将无法做到这一点。你可以做一个循环来只解压缩你的文本文件,用 sed 编辑并再次压缩。否则,我认为这是不可能的......

    可能是这样的

    xzcat blah | sed /../../ | xz blah
    

    在遍历所有文件的循环中

    【讨论】:

      【解决方案3】:

      感谢格莱美的灵感,这是一个最小的例子,以防有人来寻找相同的东西。 在文件夹中创建一些数据:

      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 命令(用于更改时间戳)。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多