패치 명령 출력 "패치가 줄 중간에서 예기치 않게 종료되었습니다."

패치 명령 출력 "패치가 줄 중간에서 예기치 않게 종료되었습니다."

diff 및 patch 명령을 스크립트로 작성하려고 합니다. 사용 하시면 bzcat이런 경고창이 뜹니다.

# bzcat consolidated.patch.tar.bz2 | patch -d dev -p1 
  patch unexpectedly ends in middle of line
  patch unexpectedly ends in middle of line
# echo $?
  0

압축을 푼 파일을 사용하여 패치하는 경우에는 그러한 경고가 발생하지 않습니다.

# tar -xf consolidated.patch.tar.bz2
# patch -d dev -p1 < consolidated.patch
# echo $?
  0

결과 폴더를 비교했지만 두 방법 모두 동일합니다

# diff -aurN dev1 dev2 > res.diff
# stat res.diff 
  File: res.diff
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file

답변1

파일 이름과 파일이 로 시작한다는 사실에 따르면 tar파일은 consolidated.patch.tar.bz2bzip2를 사용하여 압축된 tar 아카이브입니다. 파일을 함께 붙여넣고 하나의 도구로 압축할 수 있는 zip 아카이브와는 다르지만 파일을 집계하는 단계( tar)와 배치를 압축하는 단계( bzip2)가 다릅니다. (스마트 구현은 tar일반적인 압축 도구를 알고 자동으로 실행할 수 있다는 점을 제외하고)

따라서 아카이브된 파일 대신 bzcat압축되지 않은 tar 아카이브를 얻게 됩니다. 파일이 하나만 포함되어 있는 경우에도 마찬가지입니다. 이상하게도 patch나는 그것을 읽을 수 없다.

GNU tar를 사용하면 (적어도) -O/ 옵션을 사용하여 --to-stdout파일 데이터를 stdout으로 보낼 수 있습니다.

tar -xj -f consolidated.patch.tar.bz2 -O | patch

(또는 ... -O consolidated.patch유일한 파일이 아닌 경우 해당 파일을 출력하십시오.)

파일이 하나만 있는 경우에는 실제로 이 tar단계가 필요하지 않으며 파일을 사용하지 않고 압축할 수 있습니다. tar를 사용하여 bzip2 consolidated.patch파일을 만든 consolidated.patch.bz2다음 bzcat작업을 계속할 수 있습니다.

관련 정보