두 디렉토리 사이의 모든 하드 링크 파일 찾기

두 디렉토리 사이의 모든 하드 링크 파일 찾기

둘 이상의 디렉토리에 있는 파일에 대한 하드 링크가 존재하는지 어떻게 알 수 있습니까? 즉, 두 개 이상의 디렉터리에 있는 파일이 동일한 파일을 참조합니까?

~처럼특정 파일에 대한 모든 하드 링크를 찾는 방법은 무엇입니까? [복사]그리고동일한 inode 번호를 가진 모든 파일을 나열하시겠습니까?. 그런데 검색하는 방법을 알고 싶어요어느하드 링크 파일서로 다른 디렉토리 사이.

답변1

find2개 이상의 링크가 있는 디렉토리에 있는 모든 파일의 inode 번호를 나열한 다음 결과를 정렬하고 동일한 inode가 여러 번 나타나는 줄을 추출할 수 있습니다 .

이러한 디렉터리는 동일한 파일 시스템에 있어야 합니다.

find dir1 dir2 ... -xdev -type f -links +1 -printf '%i %p\n' |
sort -n -k1,1 |
awk '{   same = ($1==last)
         if(!same)save = $0
         else{ if(save!=""){ print save; save = "" }
                print 
         }
         last = $1
}'

이 코드는 파일과 해당 inode를 인쇄합니다.

108743 /tmp/a1
108743 /tmp/a2-hardlink-to-a1

사용할 수 없는 경우 find사용됩니다 ls -i1.

답변2

이 명령은 해당 디렉토리 아래의 파일에 연결된 모든 파일을 find인쇄해야 합니다 ../b./a

find ./a -type f -exec find ./b -samefile {} -printf "%p hard link to {}" \;

주어진 파일 경로 및 inode 번호의 예

$ find -type f -printf '%p:%i\n' | sort | column -t -s:
./a/f  12977541
./b/f  12977577  # unique file
./c/f  12977541  # points to same file as path ./a/f
#file  inode

디렉토리에서 find 명령을 실행 ./a하고 ./b디렉토리 아래에서 하드 링크된 파일을 찾으십시오 ./c.

 $ find ./a ./b -type f -exec find ./c -samefile {} -printf "%p hard link to {}" \;
 ./c/f hard link to ./a/f


이것은 하나입니다오(n^2)작업. 파일이 많아서 시간이 오래 걸립니다!

사용GNU 찾기 4.4.2,리눅스 3.13.0-85,우분투14.04.

관련 정보