回答:
私は、使用する前にこれをやったrsync -aHAX --delete
追加して覚える-n
と-i
フラグを。
これは少し直感に反しますが、私にはご容赦ください。主なrsync
コマンドは、2つのディレクトリを一緒に同期するために必要なものです。しかし-n -i
、同期を行わない(つまり、ドライランを実行する)だけで、実行したこととその理由を出力するだけです。解析するのは素晴らしいことではありませんが、ファイル名を簡単に取得してパイプするls
か、同様のものを使用できます。
これは、mtimes、日付などを含むすべてを調べ、デバイスノード、ソケット、名前付きパイプなどをフォローしません。上記のコマンドラインは、ACLと拡張属性も調べます。オプションをrsync
に変更することで、見ているものを調整できます。1つのデバイスに制限し-x
、ソフトリンクとハードリンクの動作などを変更します。
janosはすでに何をすべきかを言っています:
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
find
は、GNU の機能がstat
組み込まれています(そして、GNU statが数十年前に登場します)。また、比較する前に出力をソートすることもできます。そして、あなたが必要とする(cd /a && find . ...)
すべての行が原因で異なりますそれ以外の場合は/a
対/b
ファイルパスに。
拡張属性を比較するために書いた簡単な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