gpt4 book ai didi

linux - 合并头文件和部分尾文件然后合并到标准输出的有效方法

转载 作者:太空狗 更新时间:2023-10-29 12:38:27 25 4
gpt4 key购买 nike

实际上,我正在非常痛苦地恢复损坏的 gzip 文件,可能是由于 ftp 传输中断然后恢复。谷歌搜索后我发现Recovering a damaged .gz file并且正在尝试阅读。

我现在正在做的是将一个 gzip 头文件与损坏文件的最后一部分合并,改变最后一部分的大小。然后我将合并后的文件作为 gunzip 输入进行测试,看它是否能产生有意义的结果。我写了一个脚本,以下是将合并重定向到 gunzip 的最佳方法。将文件内容重定向到 gzip 的更有效方法是什么?我猜你不应该创建任何文件。 ($i 是一个大小变量)

cat head > x.gz; tail -c $i tail >> x.gz; gzip -t x.gz 2>&1 1>/dev/null

最佳答案

相同但没有临时文件:

for ((i=0; i<$TAIL_FILE_SIZE; $i++)); do
( cat head; tail -c $i tail ) | gzip -t &>/dev/null && { echo "TEST OK: $i"; break; }
done

() 创建子外壳。它的输出被馈送到 gzip -t,如果它不是终端,它会从标准输入读取。没有临时文件 - 所有数据都在管道中。

在你的情况下,我认为 tail -c 应该没问题。许多 GNU 工具(包括 tail)有相当多的性能帮助优化。例如。在我办公室的 SUSE 上,tail -c 使用 mmap() 访问输入文件。

否则通常使用 dd 读取偏移量的文件。

附言在 Perl 中,您可以将头文件和尾文件读入内存,然后使用 substr() 尝试将片段从 CPAN 提供给某个 gzip 库。 (我很确定有用于 Perl 的 gzip 库 - 但我没有使用过一个。谷歌立即显示了很少的点击。)这样你就可以通过删除进程的启动和重新读取文件来进一步减少开销。

关于linux - 合并头文件和部分尾文件然后合并到标准输出的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3118095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com