현재 스크립트를 사용하여 내 컴퓨터의 파일을 백업하고 있습니다.
간단히 말해서 다음과 같이 작동합니다.
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-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
참고: 두 파일 간에 하나 이상의 기호만 다른 경우 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 외에도