2025/02/26 ディレクトリ差分比較ツール -------------------------- [1] ツールのインストール -------------------------- sudo dnf install bsdtar sudo dnf makecache --refresh sudo dnf install diffoscope no matching... ★dnfでは見つからなかった。 sudo pip install diffoscope ★rootでpipを使うなと警告されるがしょうがない。 -------------------------- [2] 実験材料の作成 -------------------------- C:\usr\java\ec-projects\plainwebapp.zip を /home/eikeda0250/work/difftest にアップロード bsdtar xvf plainwebapp.zip 一部をいじってから tar cvzf plainwebapp2.tar.gz plainwebapp plainwebapp1.zip plainwebapp2.tar.gz plainwebapp3/ plainwebapp4/ を作成する -------------------------- [3] ローカルディレクトリ同士の比較 -------------------------- diff -qr plainwebapp3 plainwebapp4 ----- Files plainwebapp3/download2.jsp and plainwebapp4/download2.jsp differ Only in plainwebapp3: download2.jsp.orig Files plainwebapp3/download3-result.jsp and plainwebapp4/download3-result.jsp differ Only in plainwebapp4: download3-result.jsp.orig Only in plainwebapp4/old: test.txt Only in plainwebapp3/old: upload2.jsp.20240823 ------ 特定のディレクトリやファイルを除外するには--exclude=**(複数可) ------ diff -qr --exclude=.git --exclude=old plainwebapp3 plainwebapp4 ------ -------------------------- [4] ローカル圧縮ファイル同士の比較 -------------------------- diffoscope --html report.html plainwebapp2.tar.gz plainwebapp5.tar.gz ★zipとtar.gzの比較はできない(バイナリファイル同士として比較されてしまう)らしい。 ★アーカイブ内のファイルのパスも比較されるから、app1を圧縮したapp1.tar.gzとapp2を圧縮したapp2.tar.gz を比較すると、パスのapp1とapp2が違うから全ファイルが違うと判定されてしまう。 ★diffoscopeはリモートマシンのtar.gzをhttpやftpで取得しながら比較はできない。 先にcurlかwgetでローカルに持ってきて比較する必要がある。 (wget -O or curl -o) -------------------------- [5] ローカルとリモートのディレクトリ同士の比較 -------------------------- rcloneはクラウドストレージでの活用が売りらしいが、普通のリモートマシンにも使える。 公式 https://rclone.org/downloads/ からWindows-Intel/AMD-64bit版をDL、展開 C:\Wintools\rclone-v1.69.1-windows-amd64 をPATHに追加 コマンドプロンプト cd c:\usr\gcp rclone config いろいろ入力する。 New remote を選択 リモート名(例: linux_server)を入力 ストレージタイプは sftp を選択 Linuxサーバの ホスト名/IPアドレス を入力 ユーザー名 を入力(例: user) パスワード or SSHキー を設定 ★SFTPを選ぶとホスト名、ユーザー名、ポート番号の順に聞いてくる。 また秘密鍵は改行文字を\n文字に置き換えて1行で設定するか、.pemファイルのパスを指定するかが選べる (両方この順に聞いてくる) 以下を実行 rclone sync gce-rocky:work/difftest/plainwebapp "C:\usr\java\ec-projects\plainwebapp" --dry-run --checksum --verbose ★補足:rsyncとrcloneの違い… rsyncは双方向同期ができる一方、Windows版バイナリ配布はWSLかCygwinしかない。 rcloneは単方向な一方、Windowsネイティブのバイナリ配布がある。 (以上)