ファイルとディレクトリを再帰的に比較するdiffのようなLinuxツールはありますが、拡張属性、acl、seコンテキストの比較も追加されていますか?
rsync -aHAX --delete
を使用する前にこれを行ったので、-n
フラグと-i
フラグを忘れずに追加してください。
これは少し直観に反していますが、我慢してください。メインのrsync
コマンドは、2つのディレクトリを同期するために必要なコマンドです。ただし、-n -i
を指定すると、同期は行われず(つまり、ドライランが行われ)、何が行われたかとその理由が出力されます。解析するのは素晴らしいことではありませんが、ファイル名を簡単に取得して、ls
または同様のものにパイプすることができます。
これは、mtimes、日付などを含むすべてを調べ、デバイスノード、ソケット、名前付きパイプなどを追跡しません。上のコマンドラインは、ACLと拡張属性も調べます。オプションをrsync
に変更したり、-x
を使用して1つのデバイスに制限したり、ソフトリンクとハードリンクの動作を変更したりすることで、見ているものを調整できます。
ジャノスはすでに何をすべきかを述べました:
find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b
diff -u a b
そしてman 1 stat
さんのコメント:
%A access rights in human readable form
%C SELinux security context string
%F file type
%g group ID of owner
%u user ID of owner
%s total size, in bytes
%Y time of last modification, seconds since Epoch
%n file name
使用できるファイルの内容を比較するには:
find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-
as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash
拡張属性を比較するために私が書いた簡単なbashスクリプトは次のとおりです。すべてのファイル名を出力し、属性の違いを出力します。
cd a
export relpath=[path/to/b/from/a]
for filename in $(find .);
do
echo $filename;
diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done
別の答えを借りて、stat
の代わりにxattr
を使用するようにこれを変更できます。
for filename in $(find .);
do
echo $filename;
diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done