이에 대해 질문이 있습니다.
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
읽는 동안 충분히 버퍼링하면 귀하의 버전이 작동하는 경우가 있습니다.