我目前正在使用脚本来备份计算机上的文件。
简而言之,它的工作原理如下:
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 之外