代码之家  ›  专栏  ›  技术社区  ›  villasv

替换而不是截断的bash重定向

  •  1
  • villasv  · 技术社区  · 6 年前

    假设我有个档案 foo.txt bar.txt . 当我这么做的时候

    > foo.txt
    

    条形图.txt

    是否有一种重定向形式将完全替换实际文件,或者正在删除 foo.txt文件 foo.txt文件 使用旧数据。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Alfe    6 年前

    我想没有。

    您想要的是为文件获取一个新inode foo.txt 为了让它独立于 bar.txt (应该一直指向原始inode)。为了得到一个新的inode,你首先必须放开原来的inode。对此,只有一个系统调用: unlink(2) . 您可以从命令行使用 rm(1) 或其他工具,如 find -delete

    另一种方法是重命名原始文件,例如。g。使用 mv 当然或含蓄地使用 cp -b :

    cp -b <(cat /dev/null) foo.txt
    
        2
  •  1
  •   chepner    6 年前

    文件系统不区分 foo.txt bar.txt ; 其中一个并不比另一个更“真实”或“重要”,而且两个文件系统条目都平等地引用同一个文件。使用 > 打开相同的基础文件进行写入,无论使用哪个名称。

    你想做的是 代替 文件系统条目本身。为此,首先需要一个新的空文件,然后可以重命名它。

    > new.txt
    mv new.txt foo.txt