하드링크를 일반 파일로 변환하려면 어떻게 해야 하나요?

하드링크를 일반 파일로 변환하려면 어떻게 해야 하나요?

나는 모든 파일이 하드 링크라는 것을 알고 있습니다. 이것이 바로 내가 의미하는 바입니다. inode에 이를 가리키는 파일이 두 개 이상 있는 경우 모든 파일이 동일한 내용을 가진 별도의 inode를 가리키도록 inode를 어떻게 복사할 수 있습니까?

예를 들어:

echo "Example" > one
ln one two

inode를 공유하지 않고 파일의 two내용을 와 동일하게 만들려면 어떻게 해야 합니까? one원하시면 파일을 "복제"하고 싶습니다.

답변1

이는 다음 명령으로 달성할 수 있습니다.

find -samefile filename -exec sed -i ';;' {} \;

또는 이제 파일의 inode 번호가

find -inum inode -exec sed -i ';;' {} \;

이 두 명령은 모두 현재 작업 디렉터리의 하위 디렉터리에서 일치하는 inode가 있는 파일만 찾습니다. 파일 시스템의 모든 파일을 검색해야 하는 경우 루트 디렉터리에서 이 명령을 실행해야 합니다.

첫 번째 부분은 find -samefile filename동일한 inode를 공유하는 모든 파일을 찾습니다. 그런 다음 sed -i ';;'파일을 동일한 이름의 파일에 복사하는 것을 실행합니다 ( ';;'대신 sed 스크립트를 사용합니다 ';'. 그렇지 않으면 find인수를 명령 ;의 끝으로 해석합니다 -exec).

관련 정보