diff -r a b
ディレクトリを再帰的に比較しています。ㅏそして第二。これは、いくつかの切断リンクがあるにもかかわらず、しばしば起こります(2つの同じ切断リンク)。ㅏそして第二存在しない同じターゲットを指します)。
違いその後、このような場合のエラーメッセージを印刷し、ゼロ以外の終了コードで終了しますが、ディレクトリは私の本と同じであるため、自動的に終了してゼロで終了したいと思います。
どうすればいいですか?
ベストアンサー1
3.3以降では、次の説明に従ってdiff
このオプションを使用する必要があります。--no-dereference
フィットハランの答え。
残念ながら、以前のバージョンはdiff
シンボリックリンクの無視はサポートされていません。:
一部のファイルはディレクトリでも一般ファイルでもありません。シンボリックリンク、デバイス特殊ファイル、名前付きパイプ、ソケットなどの珍しいファイルです。現在、
diff
シンボリックリンクは通常のファイルとして扱われます。他の特殊ファイルが最上位レベルで指定されている場合は、通常のファイルとして扱われますが、ディレクトリを比較したときにのみそのファイルの存在を報告します。これはpatch
、そのファイルの変更を表示できないことを意味します。たとえば、シンボリックリンクが指すファイルを変更すると、diff
シンボリックリンクに対する変更ではなく、2つのファイル間の違いが出力されます。
diff
特殊ファイルへの変更はオプションで具体的に報告する必要があり、これらの拡張をpatch
理解するには拡張を作成する必要があります。
必要なものがrsyncをチェックし、失われたエントリを修正することであれば、rsyncコマンドを再実行できます。やりたくない場合は、ディレクトリチェックサムそれで十分だと思います。
を使用してこれを本当に実行するには、シンボリックリンクをスキップしてdiff
各find
ファイルに対して個別にdiffを実行できます。ディレクトリ転送ㅏそして第二パラメータとして:
#!/bin/bash
# Skip files in $1 which are symlinks
for f in `find $1/* ! -type l`
do
# Suppress details of differences
diff -rq $f $2/${f##*/}
done
または1行で:
for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done
これにより、内容が異なるファイルを識別できます。ㅏしかし、そこにはありません。第二。
気づく:
- シンボリックリンクを完全にスキップするため、シンボリックリンク名が存在しないかどうかはわかりません。第二。これを行う必要がある場合は、すべてのシンボリックリンクを識別し、そのリンクが存在することを明示的に確認する2番目のルックアッププロセスが必要です。第二。
- 追加ファイルは次の場所にあります。第二リストは以下で作成されたため認識されません。ㅏ。あなたのシナリオではこれが問題ではないかもしれません
rsync
。