对此我有一个疑问:
for i in ./*.gz
do
gunzip -c $i | head -8000 | gzip > $(basename $i)
done
我收到 gzip 的“意外文件结尾”错误,而且根本没有得到 8000,只有几十行。我检查了文件的完整性,一切正常。奇怪的是,如果我运行单个文件:
gunzip -c file1.gz | head -8000 | gzip > file1.gz
我得到了预期的结果。使用此脚本,我可以从包含 10708712 行的压缩文件中获取前 8000 行,然后再次压缩。新文件会覆盖原始文件,但没关系。
答案1
您应该将输出写入临时文件,然后重命名:
for i in ./*.gz
do
gunzip -c "$i" | head -8000 | gzip > "$i.tmp"
mv -f "$i.tmp" $(basename "$i")
done
gunzip
如果您在阅读时缓冲足够,您的版本有时会起作用。