例えば、旧バージョンのソースファイルと新バージョンのソースファイルとの差分があるファイル名一覧のみ表示したい場合などがありませんか?
このような場合は、-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>