[unix] 중복 파일을 하드 링크로 바꾸는 쉬운 방법이 있습니까?

find두 디렉토리에서 중복 파일을 찾고 한 디렉토리의 파일을 다른 디렉토리의 파일의 하드 링크로 바꾸는 쉬운 방법 (명령 또는 일련의 명령, 아마도 관련 )을 찾고 있습니다.

상황은 다음과 같습니다. 여러 사용자가 오디오 파일을 저장하는 파일 서버이며 각 사용자는 자신의 폴더를 가지고 있습니다. 때때로 여러 사람이 동일한 오디오 파일의 사본을 가지고 있습니다. 지금, 이들은 중복입니다. 하드 드라이브 공간을 절약하기 위해 하드 링크가되도록하고 싶습니다.



답변

http://cpansearch.perl.org/src/ANDK/Perl-Repository-APC-2.002/eg/trimtrees.pl에 perl 스크립트 가 있습니다.

명령 행에 이름이 지정된 모든 디렉토리를 탐색하고 MD5 체크섬을 계산하고 동일한 MD5를 가진 파일을 찾으십시오. 파일이 동일하면 실제로 동일하면 실제 비교를 수행하고 두 파일 중 두 번째 파일을 첫 번째 파일에 대한 하드 링크로 바꿉니다.


답변

rdfind당신이 요구하는 것과 정확하게 johny를 나열한 순서대로 수행 합니다. 중복을 삭제하고 소프트 링크 또는 하드 링크로 교체 할 수 있습니다. symlinks당신 과 함께 symlink를 절대 또는 상대로 만들 수도 있습니다. 체크섬 알고리즘 (md5 또는 sha1)을 선택할 수도 있습니다.

컴파일되어 있기 때문에 대부분의 스크립팅 된 솔루션보다 빠릅니다. time2009 년 Mac Mini에 2600 개의 파일이있는 15GiB 폴더에서

9.99s user 3.61s system 66% cpu 20.543 total

(md5 사용).

대부분의 패키지 처리기 (예 : Mac OS X 용 MacPorts)에서 사용할 수 있습니다.


답변

fdupes도구를 사용하십시오 :

fdupes -r /path/to/folder디렉토리의 중복 목록을 제공합니다 (-r은 재귀적임). 결과는 다음과 같습니다.


filename1
filename2

filename3
filename4
filename5


filename1과 filename2는 동일하고 filename3, filename4와 filename5도 동일합니다.


답변

http://jak-linux.org/projects/hardlink/hardlink 에서 사용합니다.


답변

이것은 “fslint”가 제공하는 기능 중 하나입니다 –
http://en.flossmanuals.net/FSlint/Introduction

“병합”버튼을 클릭하십시오 :

스크린 샷


답변

주요 목표는 디스크 공간을 절약하는 것이므로 파일 시스템 수준에서 중복 제거 (및 아마도 압축)라는 또 다른 솔루션이 있습니다. 하드 링크 솔루션과 비교하여 다른 링크 된 파일에 실수로 영향을주는 문제는 없습니다.

ZFS는 풀 버전 23부터 중복 제거 (파일 수준이 아니라 블록 수준)를 수행했으며 오래 전부터 압축을 수행했습니다. Linux 를 사용하는 경우 zfs-fuse를 시도 하거나 BSD를 사용하는 경우 기본적으로 지원됩니다.


답변

오늘날의 리눅스에는 https://github.com/g2p/bedup 이 있습니다. btrfs 파일 시스템에서 중복을 제거하지만 1) 스캔 오버 헤드없이 2) 파일을 나중에 쉽게 다시 분기 할 수 있습니다.