私はそれをdiff -rq
Mac OS X 10.6サーバーのディレクトリを比較するのに使います。フォルダ1には「ファイル名」があります。フォルダ2には、同期するファイルを保持するファイル同期アプリケーションによってフォルダ2が作成されたため、「filename.archive」があります。
バックアップからフォルダ1を抽出したところ、フォルダ2の内容が最新でコピーできることを確認したいと思います。
どうすればいいですか?具体的には、「file」が「file.archive」と同じように評価され、ファイル名ではなくファイルの内容やチェックサムで比較する方法を尋ねています。
答え1
diff
両方のディレクトリのファイル名が一致せず、diffにマッピングを実行するために組み込まれていないため、「just」を使用してこれを行うことはできません。
あなたができることは、「新しい」ディレクトリに変更し、次のことを行います。
for i in *; do diff "$i" /path/to/other/dir/"$i"; done
または、復元されたバックアップディレクトリに変更して、次の手順を実行します。
for i in *.archive; do diff "$i" /path/to/new/dir/"${i%.archive}"; done
これが完全なディレクトリ構造に拡張されると、より複雑になります。元のファイルが下にある場合、a
バックアップは下に一時的に復元されますbackup/b
。
.
├── a
│ ├── p
│ │ ├── x
│ │ ├── y
│ │ └── z
│ └── q
│ ├── 1
│ ├── 2
│ └── 3
└── backup
└── b
├── p
│ ├── x.archive
│ ├── y.archive
│ └── z.archive
└── q
├── 1.archive
├── 2.archive
└── 3.archive
次のスクリプトを実行できますpython toddiff.py a backup/b > todiff
(todiffは上記のツリー構造にリストされていません)。
import sys
import os
base = sys.argv[1]
if base[-1] != '/':
base += '/' # this last / needs to be removed to create bup_file_name
backup = sys.argv[2]
for root, directory_names, file_names in os.walk(base):
for file_name in file_names:
full_name = os.path.join(root, file_name)
bup_file_name = os.path.join(backup, full_name.replace(base, '', 1))
bup_file_name += '.archive'
# adjust the diff options to your need in the following line
print('diff -u "{}" "{}"'.format(full_name, bup_file_name))
これにより、次の形式のファイルが生成されます。
diff -u "a/q/3" "backup/b/q/3.archive"
diff -u "a/q/1" "backup/b/q/1.archive"
diff -u "a/q/2" "backup/b/q/2.archive"
.
.
その後、次のように取得できます。source ./todiff
この場合、次のプログラムを実行することをお勧めします。