inodeで2つのフォルダを区別する方法

inodeで2つのフォルダを区別する方法

現在、スクリプトを使用してマイコンピュータのファイルをバックアップしています。

簡単に言えば、次のように動作します。

rsync --link-dest=$FOLDER/current $SOURCE $DESTINATION

しかし、私のスクリプトはいくつかのファイルをハードリンクするのではなくコピーすることができると思いました。どのファイルが重複して検出されているか(または検出されていない)ことを確認したいと思います。ファイルが正しくハードリンクされており、両方のファイルが同じinodeを共有していることを知っています。

inodeで2つのフォルダ間の違いを比較するには?

答え1

#!/bin/sh
cd path1
find . -type f -exec ls -i {} + | sort -k2 > ~/path1.lst
cd path2
find . -type f -exec ls -i {} + | sort -k2 > ~/path2.lst
cd ~
diff -U0 path1.lst path2.lst

答え2

-vコマンドの(verbose)-nパラメータと(test run)パラメータを使用して、rsyncファイルの変更をシミュレートして表示できます。

rsync -van src_dir/ dest_dir/ --delete 

1.0.1より前のバージョンのlink-destrsyncは、ファイルがターゲットディレクトリとディレクトリの両方に存在する場合、正しく機能しません。

答え3

私が正しく理解した場合、バックアップファイルは重複して保存されます。スクリプトに日付スタンプやmd5sumなどのチェックサムを追加できるようです。たとえば、

DESTINATION="(date +%F-%H-%M).foo-files"

#!/bin/sh
### Checking md5 hash ###

x='foo'
y='bar'
z=`echo $x | /usr/bin/md5sum`
a=`echo $y | /usr/bin/md5sum`
if [ "$z" = "$a" ];then
        echo '=-=-=-Stuff_duplicate-=-=-='
        . . .
fi

注:2つのファイル間で1つ以上のシンボルのみが異なる場合、MD5ハッシュは変更されます。

頑張ってください! =)

答え4

私が正確に理解したかどうかはわかりませんが、ハードリンクに言及するときは、元のファイルとバックアップファイルの間ではなく、バックアップ間のハードリンクを意味してください。

findを使用すると、同じinodeを持つファイルを見つけることができます。

dest_dir 検索 -samefile orig_dir/file

このコマンドは、元の inode と一致するファイルのリストを提供します。

ループに入れると、次のことができます。

for i in `ls orig_dir`
do
        result=`find dir2/ -samefile dir1/firstfile`
        if [ result  != "" ]
        then
                echo "Duplicate: " $i
        fi
done

これにより、元のディレクトリとターゲットディレクトリの間にinodeごとにハードリンクされたすべてのファイルが印刷されます。 findはこのフラグで常にtrueを返すので、出力に基づいてifを実行していることに注意してください。マンページから。

すべてのオプションは常にtrueを返します。 -daystart、-follow、-regextypeに加えて

関連情報