このエントリーをはてなブックマークに追加


diffコマンドで差分が発見されたファイル名のみを出力する方法

例えば、旧バージョンのソースファイルと新バージョンのソースファイルとの差分があるファイル名一覧のみ表示したい場合などがありませんか?
このような場合は、-qオプションを指定すると実現することができます。


diffに-qオプションを利用して比較してみる。

今回はPostgreSQLのソースファイルをダウンロードして比較をしてみます。

ダウンロードしたファイルは、postgresql-9.1.1.tar.gz, postgresql-9.0.5.tar.gz の2つです。
tarballを展開して比較してみます。
以下、展開後のdiffによる比較の実行結果になります。
今回はディレクトリ以下に存在するファイルの全比較なので-rオプションも使用しました。

$ diff -rq postgresql-9.1.1 postgresql-9.0.5
ファイルpostgresql-9.1.1/.gitignoreとpostgresql-9.0.5/.gitignoreは違います
ファイルpostgresql-9.1.1/COPYRIGHTとpostgresql-9.0.5/COPYRIGHTは違います
ファイルpostgresql-9.1.1/GNUmakefile.inとpostgresql-9.0.5/GNUmakefile.inは違います
<snip>
postgresql-9.1.1/contrib/adminpackだけに発見: adminpack.control
postgresql-9.0.5/contrib/adminpackだけに発見: adminpack.sql.in
postgresql-9.0.5/contrib/adminpackだけに発見: uninstall_adminpack.sql
<snip>
ファイルpostgresql-9.1.1/src/tutorial/funcs.sourceとpostgresql-9.0.5/src/tutorial/funcs.sourceは違います
ファイルpostgresql-9.1.1/src/tutorial/funcs_new.cとpostgresql-9.0.5/src/tutorial/funcs_new.cは違います
ファイルpostgresql-9.1.1/src/tutorial/syscat.sourceとpostgresql-9.0.5/src/tutorial/syscat.sourceは違います
ファイルpostgresql-9.1.1/src/win32.makとpostgresql-9.0.5/src/win32.makは違います

上記の実行結果を見ると異なるファイルと片方にしか存在しないファイル名が表示されているのがわかります。

その他

出力が日本語だと大変わかりやすいのですが、英語表記の出力にしたい場合は、LANG=Cを付けて実行します。
以下、実行結果になります。

$ LANG=C diff -rq postgresql-9.1.1 postgresql-9.0.5
Files postgresql-9.1.1/.gitignore and postgresql-9.0.5/.gitignore differ
Files postgresql-9.1.1/COPYRIGHT and postgresql-9.0.5/COPYRIGHT differ
Files postgresql-9.1.1/GNUmakefile.in and postgresql-9.0.5/GNUmakefile.in differ
<snip>
Only in postgresql-9.1.1/contrib/adminpack: adminpack.control
Only in postgresql-9.0.5/contrib/adminpack: adminpack.sql.in
Only in postgresql-9.0.5/contrib/adminpack: uninstall_adminpack.sql
<snip>


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:28:19