はじめに
特定ディレクトリ(カレントディレクトリ)直下にある、ファイルの情報を一度に取得するコードです。
私はこのコードの作成背景にあたり、以下の状況にありました。
- 状況
Gitのリモートリポジトリを別のサービスに移行する。
この時、元のリポジトリをA、Aと全く同じコードをプッシュした新しいレポジトリをBとする。 - 問題点
特定ディレクトリ(レポジトリ)直下にあるすべてのファイルの容量、ハッシュ値が全て同じかどうかをチェックする必要がある。
だが、フォルダが大量にあるため、いちいちコマンドを打つのは手間
そこで、ShellScriptを使って半自動化しようというわけです。
目的
- リポジトリAとリポジトリBが全く同じかを確認するために、交互にチェックアウトした状態で、すべてのファイル容量、ハッシュ値をエビデンスとして取得する
- 取得したデータの差分をチェックする
手順
私の状況では、手順5まで行いましたが、ただ単に情報を取得するだけの場合、手順2まででOKです。
#!/bin/bach
TRAGET_DIR="."
find "$TARGET_DIR" -type f | while read -r file; do
md5 "&file" #ファイルのハッシュ値を調べる場合
ls -l "$file" | awk '{print $5, $9}' #ファイルの容量(Byte)を調べる場合
- 上記のシェルスクリプトを適当なテキストエディタで書く
ここでは、ハッシュ値を取得するためにmd5コマンドを使っているが、ハッシュ値はSHA256など他の方法もある。 - 適当な名前(例:
GetFileInfo.sh
)で調査対象のディレクトリ直下に保存 - ターミナルでディレクト直下に移動し、
bash GetFileInfo.sh
でコマンド実行 - 1~3をリポジトリAとリポジトリBを交互にチェックアウトして実行。
各々の結果をresultA.txt
とresultB.txt
で保存する。 - 以下コマンドを実行し、差分を検知
diff resultA.txt resultB.txt
では、本日はこのあたりで。