⇧ お金の力...銀の弾丸は無いけど、金の弾丸で解決と...
オンプレミス環境だと、
⇧ jetpack.ioのDevboxとかの導入も検討した方が良いんかな?
まぁ、そんなに大規模なシステム開発で無ければ、Dockerで十分な気もしますけども...
Linuxで2つのサーバー間で両方にあるファイルのみ抽出しファイルの属性の差分を確認したい
需要があるのか分からんですが、
- Gitリポジトリで管理しているファイル群
- 本番環境で利用しているファイル群
で差分があって、どのファイルがGitリポジトリ以外で管理する必要があるのか把握したかったので、良い方法が無いか調べてみました。
ちなみに、.gitignoreで管理してるファイル群は勿論、今回の対象ではありませんので、ご安心ください。
rsyncとか使えるんであれば、手っ取り早いのかもしれないのですが、
⇧ 両方に存在するものだけを抽出することができるcommコマンドなるものがあると。
つまり、
⇧ 上記サイト様に載っていない、A且つBってのを実現したかったですと。
数学的な記号で表すと、
⇧ みたいなことを実現したかったですと。
なので、
- findコマンドでファイルのフルパスの一覧を取得する。
- commコマンドで2つのフルパスの内、共通のものを抽出する。
- 両方に存在するファイルの一覧を元に、ファイル属性を含むファイルの一覧を取得する。
- diffコマンドで差分を比較する。
みたいな感じで、両方に存在するファイルの一覧についての確認はできそう。
1. findコマンドでファイルのフルパスの一覧を取得する。
ssh [username]@[serverA] "find [/path/to/files] -type f | sort" > [/tmp/serverA_files_list.txt]
ssh [username]@[serverB] "find [/path/to/files] -type f | sort" > [/tmp/serverB_files_list.txt]
2. commコマンドで2つのフルパスの内、共通のものを抽出する。
comm -12 [/tmp/serverA_files_list.txt] [/tmp/serverB_files_list.txt] > [/tmp/common_files_list.txt]
3. 両方に存在するファイルの一覧を元に、ファイル属性を含むファイルの一覧を取得する。
ssh [username]@[serverA] "ls -l --numeric-mode $(cat [/tmp/common_files_list.txt])" > [/tmp/serverA_files_details.txt]
ssh [username]@[serverB] "ls -l --numeric-mode $(cat [/tmp/common_files_list.txt])" > [/tmp/serverB_files_details.txt]
4. diffコマンドで差分を比較する。
diff -y -W 180 [/tmp/serverA_files_details.txt] [/tmp/server2_files_details.txt] > [/tmp/files_diff.txt]
⇧ という感じになるんかな。
何か、diffコマンドじゃなく、WinMergeとかで比較したくなりますな...
ちなみに、
- 両方に存在するファイルのフルパスの一覧
- 各サーバーのファイルのフルパスの一覧
の差分を出すことで、管理対象から漏れてるファイル群を探すことはできそうですかね。
Gitの管理を信用し過ぎないというようなパワーワードを頂いたので、Gitで管理していないファイルがどれだけあるのか把握したくて、方法を模索した感じですと...
二重管理みたいになってしまうのは致し方ない感じですかね...
とは言え、アプリケーションが動くには必要で、且つ、Gitで管理していないものがどれだけあるのか、ドキュメント化されていないと辛いどころですな...
まぁ、本番環境にも、使っていないようなファイルが蓄積していくことあるあるだと思うので、何を管理すれば良いのかを正確に把握するのが難しいですな...
毎度モヤモヤ感が半端ない...
今回はこのへんで。