如何通过 inode 区分两个文件夹

如何通过 inode 区分两个文件夹

我目前正在使用脚本来备份计算机上的文件。

简而言之,它的工作原理如下:

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

但是,我认为我的脚本可能会复制一些文件而不是硬链接它们。我想验证哪些文件被(或未被)检测为重复项。我知道该文件已正确硬链接,两个文件共享相同的索引节点。

如何通过 inode 比较两个文件夹的差异?

答案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(详细)和-n(试运行)参数rsync来模拟和查看文件更改。

rsync -van src_dir/ dest_dir/ --delete 

请注意,当文件同时存在于目标目录和link-dest目录中时,1.0.1 之前的 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

注意:如果两个文件中只有一个或多个符号不同,MD5 哈希值就会发生变化。

祝你好运! =)

答案4

不确定我是否正确理解您的意思,但是当您提到硬链接时,我希望您指的是备份之间的硬链接,而不是原始文件和备份文件之间的硬链接。

通过find可以找到哪些文件有相同的inode。

查找 dest_dir -samefile orig_dir/file

该命令将为您提供一个与原始索引节点匹配的文件列表。

如果您将其放入循环中,您可以执行类似的操作

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

这将通过 inode 打印原始目录和目标目录之间硬链接的所有文件。请注意,我正在根据输出执行 if,因为使用此标志 find 始终返回 true。从手册页。

所有选项始终返回 true。除了 -daystart、-follow 和 -regextype 之外

相关内容