diffコマンドの使い方

ファイルの差分をみるdiffコマンドを整理してみました
Ubuntu 12.04で試しています

フォルダ構成がこんな感じ時


$ tree
.
├── 1
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
└── 2
    ├── 1.txt
    └── 2.txt

差分を見たい時、


$ diff 1 2
diff 1 2
diff 1/2.txt 2/2.txt
1c1
< 1111
---
> 2222
1 のみに存在: 3.txt

unified形式だと


$ diff -u 1 2
diff -u 1/2.txt 2/2.txt
--- 1/2.txt     2014-10-16 17:11:17.925405481 +0900
+++ 2/2.txt     2014-10-16 17:17:43.965416847 +0900
@@ -1 +1 @@
-1111
+2222
1 のみに存在: 3.txt

で最初の3行がまとめで、それ以降が差です
– が1つ目のディレクトリ、+ が2つ目のディレクトリ

さらにフォルダを追加して


$ tree
.
├── 1
│   ├── 1-1
│   │   └── 1.1.text
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
└── 2
    ├── 1-1
    │   └── 1.1.text
    ├── 1.txt
    └── 2.txt

差分をみます、サブディレクトリも比較するには-rが必要です


$ diff -u -r 1 2
共通のサブディレクトリー: 1/1-1 と 2/1-1
diff -u 1/2.txt 2/2.txt
--- 1/2.txt     2014-10-16 17:41:37.781459066 +0900
+++ 2/2.txt     2014-10-16 17:41:54.381459554 +0900
@@ -1 +1 @@
-1111
+22222
1 のみに存在: 3.txt
user@user-ThinkPad-X120e:~/workspace/diff$ diff -u -r 1 2
diff -u -r 1/1-1/1.1.text 2/1-1/1.1.text
--- 1/1-1/1.1.text      2014-10-16 17:36:31.969450061 +0900
+++ 2/1-1/1.1.text      2014-10-16 17:42:11.921460071 +0900
@@ -1 +1 @@
-1-1
+2-1
diff -u -r 1/2.txt 2/2.txt
--- 1/2.txt     2014-10-16 17:41:37.781459066 +0900
+++ 2/2.txt     2014-10-16 17:41:54.381459554 +0900
@@ -1 +1 @@
-1111
+22222
1 のみに存在: 3.txt

差分をとってあてるには


$ diff -u -r 1 2 > patch.txt
$ mv patch.txt 1/
$ cd 1
$ patch -p1 < patch.txt
patching file 1-1/1.1.text
patching file 2.txt

と、diffの結果をファイルにして、あてたいフォルダへ移動、patchコマンドの-p1が1階層無視するオプションです
差分を適用したいフォルダを1つ目に指定します(今回は1ディレクトリ)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください