磁盘空间不足:删除文本文件的前 n 行而不复制文件

磁盘空间不足:删除文本文件的前 n 行而不复制文件

我想删除$rmv一个名为 的巨大文本文件的第一行$filename。这个文本文件太大了,我的硬盘上无法容纳两份副本。

以下内容给我留下了一个名为的空白文件$filename

tail -n +$rmv "$filename" > "$filename" 

以下无法执行,因为我没有足够的存储空间来容纳$filename$filename.tmp

tail -n +$rmv "$filename" > "$filename.tmp" && mv "$filename.tmp" "$filename"

如果重要的话,我正在使用 Mac OS X El Capitan。

答案1

如果你有perl

{
  tail -n +"$rmi"
  perl -e 'truncate STDOUT, tell STDOUT'
} <file 1<>file

请注意,使用这种方法时,没有文件备份,因此任何损坏都会导致您丢失数据。

答案2

我认为ed不使用临时文件,所以

ed bigfile <<ED_SCRIPT
1,${rmv}d
w
q
ED_SCRIPT

答案3

对于脚本文件编辑,选择的工具是ex

ex -sc "1,${rmv}d | x" "$filename"

您可能还想查看split公用事业

答案4

您的文本文件是 x MB,您没有 2* x MB,但我想您也没有足够的空间来压缩该文件?文本文件通常会压缩到原始大小的十分之一......

您没有足够的空间来容纳 ($total-$rmv) 行,但是如果它们被压缩怎么办?tail -n +$rmv "$filename" | gzip > "$filename.tmp" && zcat "$filename.tmp" > "$filename"

将此视为一个抽象的智力问题,我会将文件切成块,调整大小以适合内存或可用磁盘空间,从最后一个块开始,然后截断原始文件。我还可以使用诡计将文件压缩到位dd conv=notrunc

然而,在实践中,我要么

  • 通过网络将文件复制到具有足够磁盘以容纳(仅)($total-$rmv)行的服务器,检查我是否获得了正确的行,删除原始文件,然后复制回来。

  • 添加磁盘,因为您显然需要它。

相关内容