inode로 두 폴더를 구별하는 방법

inode로 두 폴더를 구별하는 방법

현재 스크립트를 사용하여 내 컴퓨터의 파일을 백업하고 있습니다.

간단히 말해서 다음과 같이 작동합니다.

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

그러나 내 스크립트가 일부 파일을 하드 링크하는 대신 복사할 수도 있다고 생각했습니다. 어떤 파일이 중복으로 감지되는지(또는 감지되지 않는지) 확인하고 싶습니다. 파일이 올바르게 하드 링크되어 있고 두 파일 모두 동일한 inode를 공유한다는 것을 알고 있습니다.

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명령의 (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

참고: 두 파일 간에 하나 이상의 기호만 다른 경우 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 외에도

관련 정보