다양한 파일이 포함된 두 개의 폴더가 있습니다. 첫 번째 폴더의 일부 파일은 두 번째 폴더에도 정확한 복사본이 있습니다. 하드 링크로 교체하고 싶습니다. 어떻게 해야 합니까?
답변1
나는 Linux용 명령줄 솔루션 4가지를 알고 있습니다. 내가 선호하는 것은 rdfind
사용 가능한 모든 옵션 때문에 여기에 나열된 마지막 항목입니다 .
fdupes
- 이것이 가장 권장되는/가장 잘 알려진 것으로 보입니다.
- 사용하기가 가장 간단하지만 유일한 작업은 중복 항목을 삭제하는 것입니다.
- 중복이 실제로 중복인지 확인하기 위해(실행하는 데 시간이 오래 걸리지 않음) 파일 간의 비교는 먼저 파일 크기별로 수행된 다음 md5 해시, 바이트별 비교로 수행됩니다.
샘플 출력("크기 표시", "재귀" 옵션 포함):
$ fdupes -Sr .
17 bytes each:
./Dir1/Some File
./Dir2/SomeFile
하드링크
- 이름에서 알 수 있듯이 발견된 파일을 하드링크로 대체하도록 설계되었습니다.
- 옵션이 있습니다
--dry-run
. - 콘텐츠 비교 방법을 나타내지는 않지만 다른 모든 옵션과 달리 파일 모드, 소유자 및 수정 시간을 고려합니다.
샘플 출력(내 두 파일의 수정 시간이 약간 다르기 때문에 두 번째 실행에서는 이를 무시하도록 지시합니다):
$ stat Dir*/* | grep Modify
Modify: 2015-09-06 23:51:38.784637949 -0500
Modify: 2015-09-06 23:51:47.488638188 -0500
$ hardlink --dry-run -v .
Mode: dry-run
Files: 5
Linked: 0 files
Compared: 0 files
Saved: 0 bytes
Duration: 0.00 seconds
$ hardlink --dry-run -v -t .
[DryRun] Linking ./Dir2/SomeFile to ./Dir1/Some File (-17 bytes)
Mode: dry-run
Files: 5
Linked: 1 files
Compared: 1 files
Saved: 17 bytes
Duration: 0.00 seconds
푸딩
- 사용자가 작업할 파일을 찾도록 만들어졌습니다. 사용 가능한 작업이 없습니다.
- 비교는 파일 크기에 따라 수행된 다음 sha1 해시에 따라 수행됩니다.
- 해시는 sha256, sha384 또는 sha512로 변경할 수 있습니다.
- 바이트 단위 비교를 수행하기 위해 해시를 비활성화할 수 있습니다.
샘플 출력("recursive" 옵션 사용):
$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File
검색
- 옵션에는 특이한 구문이 있습니다(
find
?를 모방하려는 의미). - 중복 파일에 수행할 작업에 대한 여러 옵션(삭제, 심볼릭 링크 만들기, 하드링크 만들기).
- 드라이런 모드가 있습니다.
- 비교는 파일 크기, 첫 번째 바이트, 마지막 바이트, md5(기본값) 또는 sha1을 기준으로 수행됩니다.
- 발견된 파일의 순위를 통해 어떤 파일이 원본으로 간주되는지 예측할 수 있습니다.
샘플 출력:
$ rdfind -dryrun true -makehardlinks true .
(DRYRUN MODE) Now scanning ".", found 5 files.
(DRYRUN MODE) Now have 5 files in total.
(DRYRUN MODE) Removed 0 files due to nonunique device and inode.
(DRYRUN MODE) Now removing files with zero size from list...removed 0 files
(DRYRUN MODE) Total size is 13341 bytes or 13 kib
(DRYRUN MODE) Now sorting on size:removed 3 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 17 b can be reduced.
(DRYRUN MODE) Now making results file results.txt
(DRYRUN MODE) Now making hard links.
hardlink ./Dir1/Some File to ./Dir2/SomeFile
Making 1 links.
$ cat results.txt
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1 1 17 2055 24916405 1 ./Dir2/SomeFile
DUPTYPE_WITHIN_SAME_TREE -1 1 17 2055 24916406 1 ./Dir1/Some File
# end of file
답변2
나는 강력히 추천한다jdupes. 향상된 포크입니다.fdupes이지만 다음도 포함됩니다.
- 다음을 포함한 다양한 새로운 명령줄 옵션
--linkhard
, 또는-L
줄여서 - 모든 주요 OS 플랫폼에 대한 기본 지원
- 속도는 fdupes보다 평균 7배 이상 빠르다고 합니다.
귀하의 질문에 대해서는 실행할 수 있습니다$ jdupes -L /path/to/your/files
.
해당 소스에서 최신 소스를 복제하고 빌드할 수 있습니다.GitHub 저장소프로젝트가 아직 활발하게 개발 중이기 때문입니다.
Windows 바이너리여기에서도 제공됩니다. 패키지 바이너리는 일부 Linux/BSD 배포판에서 사용할 수 있습니다. 실제로 저는 $ apt search
.
답변3
답변4
내 컴퓨터에는 Link Shell Extension이라는 멋진 무료 도구가 있었습니다. 하드 링크와 심볼릭 링크를 생성하는 것뿐만 아니라 접합도 만드는 데 훌륭했습니다! 또한 다양한 유형의 링크를 쉽게 식별할 수 있는 사용자 정의 아이콘이 추가되었습니다. 심지어 설치 이전에 이미 존재했던 링크도 마찬가지입니다. 예를 들어 빨간색 화살표는 하드 링크를 나타내고 녹색은 심볼릭 링크를 나타내며 체인은 접합을 나타냅니다.
안타깝게도 얼마 전(다양한 프로그램을 대량으로 제거하면서) 소프트웨어를 제거했기 때문에 더 이상 수동으로 링크를 만들 수 없지만 Windows가 하드, 기호 또는 접합 링크를 감지할 때마다 아이콘은 계속 자동으로 표시됩니다.