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.bz2
bzip2を使用して圧縮されたtarアーカイブです。ファイルを一緒に貼り付けて1つのツールで圧縮できるzipアーカイブとは異なりますが、ファイルを集計するステップ(tar
)とバッチを圧縮するステップ(bzip2
)が異なります。 (スマート実装はtar
一般的な圧縮ツールを知って自動的に実行できることを除いて)
したがって、アーカイブされたファイルの代わりにbzcat
圧縮されていないtarアーカイブが取得されます。ファイルが1つだけ含まれている場合も同様です。奇妙なことに、私はpatch
それを読むことができません。
GNU tarを使用すると、(少なくとも)-O
/オプションを使用して--to-stdout
ファイルデータをstdoutに送信できます。
tar -xj -f consolidated.patch.tar.bz2 -O | patch
(または... -O consolidated.patch
唯一のファイルでない場合は、そのファイルを出力してください。)
ファイルが1つしかない場合は、実際にはこの手順は不要で、tar
ファイルを使用せずに圧縮できます。tar
を使用してbzip2 consolidated.patch
ファイルを作成し、作業consolidated.patch.bz2
をbzcat
続行できます。