![截断大文件的一半](https://linux22.com/image/1571710/%E6%88%AA%E6%96%AD%E5%A4%A7%E6%96%87%E4%BB%B6%E7%9A%84%E4%B8%80%E5%8D%8A.png)
我们让跟踪日志在我们的生产系统中肆意运行,它的大小已增长到近 50GB,导致磁盘几乎已满。我已停止跟踪,这样文件就不会再增长了。我不需要整个文件,但我也不想删除整个文件并保留最后几 GB 左右的内容。
我曾经考虑过但又否定过的观点:
- 截断文件将丢失我想要保留的最后几 GB 的数据
- PowerShell
gc | select -last 1000
向前扫描,即使对 5 GB 的文件也需要很长时间(有趣的是,在我关闭它之前,该命令对 5GB 的文件使用了超过 8GB 的 RAM) - 将文件移走保存是不可行的(这是客户站点)
是否有其他一次性的 shell 魔法命令可以将文件切成两半,并通过重复切半来达到所需的大小?
或者也许有办法将文件分成几块?(这需要在现场完成,因为没有空间存放完整的文件副本)
答案1
分割和合并大文件有很多种可能性。
如果你接受第三方免费实用程序,那么你可以使用 HJ 拆分, 或者 分割,但还存在许多其他的。
如果你想保留整个文件,同时将其压缩成块,则可以使用 7Zip,在“添加到存档”屏幕上,你会看到字段 拆分成卷,指定每个块的字节数和一些其他选项。
如果你更喜欢 PowerShell 脚本,你可以使用 拆分文件.ps1 其中包含按字节大小拆分和连接的函数:
Split-File "BigFile.dat" 10000000
dir BigFile??.dat | Join-File Rebuild.dat
如果你使用的是 Windows 的 Linux 子系统 (WSL),则可以使用 Linux 命令 分裂 和猫。
如果你只想复制文件的一部分,你可以使用这个使用命令的 PowerShell 单行程序 获取内容 和 设置内容:
$file = (Get-Content log.txt)[<from-line..<to-line>] | Set-Content logpart.txt
Get-Content
还有-Tail
您询问的参数,希望以更有效的方式。