【Shell】変更前後のディレクトリ情報を取得し、diffコマンドで差分を比較する

■今回やりたいこと

任意のディレクトリ(/work/tmp)について「初期状態」・「変更:ファイル作成」・「変更:ファイル名」の3つの状態のディレクトリ情報をテキストファイルに出力した後、テキストファイルを使用して差分を比較する。

▼イメージ図

上記3つの状態についてディレクトリ情報を取得し、差分を比較する。

▼「初期状態」と「変更:ファイル作成」を比較

・実行コマンド

# 変更前のディレクトリ情報をworkディレクトリ直下に出力
ls /work/tmp >> /work/before_tmpdir.txt

# 日付名のファイルを作成
touch /work/tmp/tmp_$(date +%Y%m%d).txt

# 変更後のディレクトリ情報をworkディレクトリ直下に出力
ls /work/tmp >> /work/after_tmpdir.txt

# 変更前後のディレクトリ情報出力ファイルについて比較
diff /work/before_tmpdir.txt /work/after_tmpdir.txt

・実行結果

5a6
> tmp_20211227.txt

[実行結果について]
「5a6」とは、「before_tmpdir.txt」の5行目、追加(a)、「after_tmpdir.txt」の6行目という意味を表す。
「> tmp_20211227.txt」とは、後者の「after_tmpdir.txt」における追加分を表す。
すなわち、「before_tmpdir.txt」ファイルになかった「tmp_20211227.txt」という文言が、後者(>)の「after_tmpdir.txt」には追加されているよ、という意味となる。
実際に両ファイルについて確認すると、以下の通りである。

▼before_tmpdir.txt

a.txt
b.txt
c.txt
d.txt
e.txt

▼after_tmpdir.txt

a.txt
b.txt
c.txt
d.txt
e.txt
tmp_20211227.txt

ちなみに、diffコマンド実行時、選択した2ファイルについて前後を入れ替えて実行すると以下のようになる。

diff /work/after_tmpdir.txt /work/before_tmpdir.txt
6d5
< tmp_20211227.txt

「6d5」とは「after_tmpdir.txt」の6行目、削除(d)、「before_tmpdir.txt」の5行目という意味を表す。
すなわち、前者(<)の「after_tmpdir.txt」ファイルに「tmp_20211227.txt」という文言があったのに、「before_tmpdir.txt」には削除されているよ、という意味となる。

▼「変更:ファイル作成」と「変更:ファイル名」を比較

・実行コマンド

# ファイル名変更
mv /work/tmp/a.txt /work/tmp/aaa.txt

# ファイル名変更後のディレクトリ情報をworkディレクトリ直下に出力
ls /work/tmp >> /work/change_filename_tmpdir.txt

# diff比較
diff /work/after_tmpdir.txt /work/change_filename_tmpdir.txt

・実行結果

1c1
< a.txt
---
> aaa.txt

[実行結果について]
「1c1」とは、「after_tmpdir.txt」の1行目、変更(c)、「change_filename_tmpdir.txt」の1行目という意味を表す。
すなわち、前者(<)の「after_tmpdir.txt」の1行目は「a.txt」であるのに、後者(>)の「change_filename_tmpdir.txt」の1行目は「aaa.txt」に変更されているよ、という意味になる。

コメント