現在、スクリプトを使用してマイコンピュータのファイルをバックアップしています。
簡単に言えば、次のように動作します。
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-dest
rsyncは、ファイルがターゲットディレクトリとディレクトリの両方に存在する場合、正しく機能しません。
答え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に加えて