[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:10040] [Summary] How do we identify two directory-trees...



せっかくだから、これ、ちょっとまとめておきますね。

質問:
    Directory treeを大規模にMigrate するときなど、2つのディレ
    クトリについて再帰的に「同一であることの確認」を行ないたい
    ことがある。どのような方法があるか。

解答:
    1.  ``tar -d''を利用して比較する。
        mode, owner, filetypeなどの差異も検出できる。

        (cd dir1 && tar -cf - .) | (cd dir2 && tar -df -)
        tar -c -f - -C dir1 . | tar -d -f - -C dir2

            -- 松本さん <shom@xxxxxxxxxxxxxxxxx> [debian-users:10005]
            -- 菅谷さん <sugaya@xxxxxxxxxxxxxxxxxxxxx> [debian-users:10004]


    2.  diffによる比較。再帰比較オプションを指定する。
        実用性十分。

        diff -aNqr dir1 dir2

            -- 中野さん <nakano@xxxxxxxxxxxxxxxx> [debian-users:10001]


    3.  tar にアーカイブを作らせてdiffで比較する。
        USTAR フォーマットの仕様によっては検証できない情報がの
        こるかな?
        bashのProcess Substitutionを使っているところもTips.

        diff <(cd dir1; tar -cf - .) <(cd dir2; tar -cf - .)

            -- うえやまさん <rui@xxxxxxxxxxxxxxxx> [debian-users:10002]


    4.  tar にアーカイブを作らせてmd5sumを比較する。原理的には
        3.と等価。

        (cd dir1; tar -cf - . | md5sum; cd dir2; tar -cf - . | md5sum)

            -- 岡さん <95i44@xxxxxxxxxxxxxxxx> [debian-users:10000 他多数 ;-)]


    5.  ファイル内容の同一性について厳密に比較する。
        検証できる情報は制限されるが、md5sumさえあればプラット
        フォームを選ばない。(下の例ではbashのProcess Substitution
        を使ってますけど、中間ファイルを作れば問題無し)

        diff \
            <(cd dir1; find . -type f -exec md5sum {} \; | sort +1) \
            <(cd dir2; find . -type f -exec md5sum {} \; | sort +1)

            -- 石川さん <ishikawa@xxxxxxxxx> [debian-users:09999]


    6.  ディレクトリ構造の検証のみでかまわなければ、tbtreeが使
        える。(Debianなら``tree''パッケージ)

            -- 亀井さん <kamei@xxxxxxxxx>
                [debian-users:09993], [debian-users:09997]


まだまだあるでしょうが、とりあえずのまとめでした。

#そういえば、``ls -alR'' な解答がなかったですね。



 -.- . -. -.
Ken Nakagaki <kenn@xxxxxxxxxxxxxxxxx>, <Nakagaki@xxxxxxxxx>
「人は船ではない。人は会社ではない」-- Gerry Spence