タグ付けされた質問 「diff」

diff-2つのファイル間の差異、または2つのディレクトリ内の対応する各ファイルを表示するコマンドラインツール。

4
切り替えられた行を持つ2つのファイルを比較した結果、同じ行が2回欠落していると表示される
私は2行のファイルでlinux diffコマンドを理解しようとしていますが、その行はお互いの順列にすぎませんが、生成される出力を理解することはできません。以下の3つのコマンドを検討してください。 [myPrompt]$ cat file1 apples oranges [myPrompt]$ cat file2 oranges apples [myPrompt]$ diff file1 file2 1d0 < apples 2a2 > apples 誰かが上記のdiffからの不可解な出力を説明できますか。 出力に「オレンジ」の記載がまったくないのはなぜですか? どういうない1d0と2a2意味ですか? 私はこの答えから次のことを理解しています: 「<」はfile2に行がないことを意味し、「>」はfile1に行がないことを意味します。 しかし、オレンジが出力にない理由を説明していません。
28 diff 

1
diff-出力行番号
ファイルの比較にcliツールを使用し、出力行の前に行番号が必要です :line-number: regular line contents だから私は試してみましたがdiff、ドキュメントを読むことは可能かもしれません: -D, --ifdef=NAME output merged file with `#ifdef NAME' diffs --GTYPE-group-format=GFMT format GTYPE input groups with GFMT --line-format=LFMT format all input lines with LFMT --LTYPE-line-format=LFMT format LTYPE input lines with LFMT These format options provide fine-grained control over the output of diff, generalizing -D/--ifdef. LTYPE …
25 diff 

1
「-d」オプションは、diffでどのような効果がありますか?
diffOpenBSD の実装には-d、次のドキュメントを含む非標準オプションがあります。 -d 可能な限り小さいdiffを作成するように非常に努力してください。これは、多くの変更を伴う大きなファイルを処理するときに、多くの処理能力とメモリを消費する場合があります。 GNU diff実装には、より短いドキュメントで同じオプションがあります -d、 --minimal 変更の小さなセットを見つけるために一生懸命 時々、このオプションを使用して、オプションdiffなしの同じコマンドとは異なる形状または形式の出力を生成するかどうかを確認するだけでしたが、違いを見たことはありません(しゃれはありません)。 誰かがこのオプションを使用せずに同じコマンドから異なる結果を実際に生成する例を提供または指摘できます-dか?または、このオプションを開始するために必要な状況を誰かが説明できるとしたら、「最小」が「出力の行数が少ない」か「ハンクが少ない」かどうかもわかりません。 無知な推測は、それが非常に大きな塊に関係しているということです。
24 diff 

3
差分、正しいファイルの変更された行のみを表示
私はファイルを持っていますa、bそしてb、それがクローンされたので、それの変更された行を出力したいと思いますa。変更された行のみ、周囲のコンテキスト、差分オフセットマークはありません。 シェルスクリプトを使用してこれを行うにはどうすればよいですか?(Python / Perl / PHP /なし) Sedとawkは許容可能なソリューションです。 今のところ、--suppress-common-linesでdiff -yを行い、正規表現の後方参照を使用してsedを実行し、空白の後の正しい部分を取得します。より良い方法があるはずです? perl(禁止)を使用して、次のようなことをします。 diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
24 shell-script  sed  awk  diff 

5
2つのフォルダーを比較し、その違いを3番目のフォルダーにコピーするにはどうすればよいですか?
次の3つのフォルダーがあります。 現在のフォルダーには、現在のファイルが含まれています 同じファイルの古いバージョンを含むフォルダold フォルダーの違い、これは単なる空のフォルダーです どのように比較するか、古いと現在とで異なる(あるいは全く新しい)しているファイルをコピー電流をに違い? 私はあらゆるところを検索しましたが、取り組むのは簡単なように思えますが、特定の例ではうまくいきません。ほとんどのソースはrsyncの使用を提案しているので、私は次のコマンドになりました。 rsync -ac --compare-dest=../old/ new/ difference/ ただし、これにより、すべてのファイルがnewからdifferenceにコピーされます(oldと同じファイルであっても)。 それが役立つ場合(コマンドが正常で、障害が他の場所にある場合)、これは私がこれをテストした方法です: 3つのフォルダーを作成しました。 私は中に異なる内容で複数のテキストファイルを作った古いです。 ファイルをoldからnewにコピーしました。 いくつかのファイルの内容を新規に変更し、いくつかの追加ファイルを追加しました。 上記のコマンドを実行し、結果の違いを確認しました。 私は過去数日間解決策を探していましたが、私はいくつかの助けを本当に感謝しています。必ずしもrsyncを使用する必要はありませんが、可能であれば、間違っていることを知りたいです。
23 files  rsync  diff  file-copy 


3
「Hunk#1 FAILED at 1(異なる行末)」メッセージを修正する方法
コマンドでパッチを作成しようとしています git diff sourcefile >/var/lib/laymab/overlay/category/ebuild/files/thepatch.patch パッチを適用すると、 $ patch -v GNU patch 2.7.5 $ /usr/bin/patch -p1 </var/lib/laymab/overlay/category/ebuild/files/thepatch.patch patching file sourcefile Hunk #1 FAILED at 1 (different line endings). Hunk #2 FAILED at 23 (different line endings). Hunk #3 FAILED at 47 (different line endings). Hunk #4 FAILED at 65 (different line …
22 git  diff  newlines  patch 

6
ディレクトリを比較しますが、ファイルの内容は比較しません
diff -rを使用するとこのタスクを実行できますが、diffはファイルのコンテンツをチェックするため、非常に時間がかかります。 2つのファイルのサイズ、最終変更などが同じであると判断できるものが必要です。ただし、ファイルを少しずつチェックすることはありません(たとえば、ビデオには時間がかかります) 他の方法はありますか?

3
正規表現に基づいてdiff / patchの関連するハンクのみを表示します
git log -G<regex> -p指定されたパターンに一致する変更をコードベースの履歴で検索するための素晴らしいツールです。ただし、ほとんど無関係なハンクの海で、diff / patch出力で関連するハンクを見つけるのは圧倒的です。 もちろんgit log、元の文字列/正規表現の出力を検索することは可能ですが、それは視覚的なノイズと多くの無関係な変更の気を散らすものを減らすのにほとんど役立ちません。 を読むとgit log、があります--pickaxe-all。これは、私が望むものとは正反対です。出力を(チェンジセット全体に)広げる一方で、(特定の塊に)制限したいのです。 基本的に、私は差分/パッチを個々のハンクに「インテリジェントに」解析し、各ハンクに対して検索を実行し(変更された行のみを対象とする)、一致しないハンクを破棄し、それらを出力する方法を探していますそうする。 説明したようなツールは存在しますか?マッチした/影響を受けたハンクを取得するためのより良いアプローチはありますか? 私がやったいくつかの初期調査... grepdiff / patchの出力が可能で、コンテキストオプションの値を動的にすると(たとえば、行数ではなく正規表現を使用して)十分な場合があります。しかしgrep、そのように正確に構築されているわけではありません(また、必ずしもその機能を要求しているわけでもありません)。 patchutilsスイートを見つけましたが、当初は自分のニーズに合っているように聞こえました。しかし、そのmanページを読んだ後、ツールは正規表現に基づいて一致するハンクを処理していないようです。(ただし、ハンクのリストを受け入れることができます...) 私はついにsplitpatch.rbに出会いました。これはパッチの解析をうまく処理しているようですが、経由stdinでパッチの読み込みを処理するために大幅に増強する必要があります。
20 git  diff  patch 


5
2つのテキストファイル(diffの反対)の共通行(類似性)を出力しますか?
Diffは、2つのファイル間の変更を表示するための優れたツールです。しかし、2つのテキストファイルの類似性を表示する方法(違いを無視しながら)? すなわち、サンプル入力: a: Foo Bar X Hello World 42 b: Foo Baz Hello World 23 擬似出力(次のようなもの): @@ 2,3 =Hello World 両方のファイルをソートして通信を使用するだけでは十分ではありません。その場合、行情報が失われるためです。

5
cpを使用する方が簡単な場合にdiff / patchを使用する理由
diff -u file1.txt file2.txt > patchfile patchfile1.txtをfile2.txtとまったく同じように変換するための命令で構成されるパッチファイルを作成します cp代わりにコマンドを使用してこれを行うことはできませんか?これは、ファイルが大きすぎて、この方法で帯域幅を節約できるネットワーク経由で転送する必要がある場合に役立つと想像できます。他のシナリオで有利になるdiff / patchを使用する他の方法はありますか?
19 shell  cp  diff  patch 

7
patchとdiffを使用して2つのファイルをマージし、競合を自動的に解決する方法
diffとパッチについて読んだことがありますが、必要なものを適用する方法がわかりません。私はかなり簡単だと思うので、私の問題を示すためにこれらの2つのファイルを取ります: a.xml <resources> <color name="same_in_b">#AAABBB</color> <color name="not_in_b">#AAAAAA</color> <color name="in_b_but_different_val">#AAAAAA</color> <color name="not_in_b_too">#AAAAAA</color> </resources> b.xml <resources> <color name="same_in_b">#AAABBB</color> <color name="in_b_but_different_val">#BBBBBB</color> <color name="not_in_a">#AAAAAA</color> </resources> 次のような出力が必要です(順序は関係ありません)。 <resources> <color name="same_in_b">#AAABBB</color> <color name="not_in_b">#AAAAAA</color> <color name="in_b_but_different_val">#BBBBBB</color> <color name="not_in_b_too">#AAAAAA</color> <color name="not_in_a">#AAAAAA</color> </resources> マージには、次の単純なルールに沿ったすべての行が含まれている必要があります。 ファイルの1つにのみある任意の行 行の名前タグが同じで値が異なる場合、2番目の値を取得します 私はこのタスクをbashスクリプト内に適用したいので、別のプログラムがより適している場合は、diffとパッチを完全に行う必要はありません

4
aptでイ​​ンストールされた元のファイルと現在のファイルの差分の変更を取得します
をphp5-fpm使用してパッケージをインストールしましたapt。次に、PHP構成ファイルにいくつかの変更を加えました。 これで、元のファイルのバージョン(インストールされているパッケージのバージョン)と現在のバージョン(自分が変更したバージョン)の差分を取得できます。どうやってするの?
19 ubuntu  debian  apt  diff 

3
Gitページャーは少ないですが、出力の色付けの原因は何ですか?
lessこのスレッドによると、それ自体は構文の強調表示を行うことができません。 ただし、git diffデフォルトのページャーであるカラー出力をより少なく表​​示します。の出力をgit diffファイルにリダイレクトすると、カラーエスケープシーケンスが表示されません。 DOESは、git diffそれが送信され、それに応じて出力をフォーマットのWHERE知っていますか?どうすればいいですか? gitがdiff出力(たとえばgit diff)に色を付けることに気付いたのですが、構文の強調表示の一般的な方法がわかりません。例えば git show 415fec6:log.tex TeXに似た構文を有効にしません。 gitソースを読んで、私は次のヒントを見つけました でdiff.h: int use_color; 以前は構文の強調表示について言及していましたが、それは正しくありませんでした。私が意味するのは、出力の色付けです。たとえば
18 colors  git  diff  pager  colordiff 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.