web-dev-qa-db-ja.com

ファイルの属性も比較するLinuxのdeep diffツールはありますか?

ファイルとディレクトリを再帰的に比較するdiffのようなLinuxツールはありますが、拡張属性、acl、seコンテキストの比較も追加されていますか?

19
Michael Gantz

rsync -aHAX --deleteを使用する前にこれを行ったので、-nフラグと-iフラグを忘れずに追加してください。

これは少し直観に反していますが、我慢してください。メインのrsyncコマンドは、2つのディレクトリを同期するために必要なコマンドです。ただし、-n -iを指定すると、同期は行われず(つまり、ドライランが行われ)、何が行われたかとその理由が出力されます。解析するのは素晴らしいことではありませんが、ファイル名を簡単に取得して、lsまたは同様のものにパイプすることができます。

これは、mtimes、日付などを含むすべてを調べ、デバイスノード、ソケット、名前付きパイプなどを追跡しません。上のコマンドラインは、ACLと拡張属性も調べます。オプションをrsyncに変更したり、-xを使用して1つのデバイスに制限したり、ソフトリンクとハードリンクの動作を変更したりすることで、見ているものを調整できます。

7
abligh

ジャノスはすでに何をすべきかを述べました:

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
2
user55518

拡張属性を比較するために私が書いた簡単な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
0
Aaron Campbell