# a.txt に含まれているファイルを含めずに b.txt の中身を出力
grep -Fxvf a.txt b.txt
これだけです。今までこれを知らなかったので非常に面倒なことをやっていました。
例えば、a.txt に「実際に使用されているファイルのリスト」、b.txt に「プロジェクトに含まれているすべてのファイルのリスト」が入っているとします。b.txt の中で a.txt に含まれていないファイルを取り出して「不要なファイル」としてリスト化したい場合に便利です。
-F は固定文字列として検索するオプションです。
-x は完全に一致する行を検索します。
-v は除外オプションで、a.txt に含まれている行を b.txt から除外します。
-f a.txt で a.txt の行を検索条件として使い、結果を
結果、b.txt の中で a.txt に含まれていない行だけが出力され、不要なファイルのリストが作成されます。
具体例
以下のような内容がファイルに含まれているとします:
a.txt(実際に使用されているファイルのリスト)
app/controllers/document_controller.py
app/controllers/file_packager.py
app/models/date_time_in_note.py
config/settings.py
scripts/main.py
b.txt(すべてのファイルのリスト)
app/controllers/document_controller.py
app/controllers/file_packager.py
app/models/date_time_in_note.py
config/settings.py
scripts/main.py
scripts/api_sample.py
tests/excel_style_diff.py
tests/profile_view.py
上記のコマンドを実行すると、b.txt にあるが a.txt に含まれていないファイルが出力されます:
$ grep -Fxvf a.txt b.txt
scripts/api_sample.py
tests/excel_style_diff.py
tests/profile_view.py
この方法で、b.txt の中で実際に使われていないファイルを確認することができます。
補足
以下でも同じことができます。
# ファイルをソートしてから比較
sort a.txt > a_sorted.txt
sort b.txt > b_sorted.txt
# a_sorted.txt にない行を出力(不要なファイルのリスト)
comm -23 b_sorted.txt a_sorted.txt > unnecessary_files.txt