현재 을(를) 사용하여 문제를 해결하려고 합니다 fdupes
. 두 폴더를 서로 비교하고 이 디렉터리 중 하나에 있는 중복 파일을 모두 제거하고 싶습니다.
예:
파일은 자동으로 저장됩니다 /srv/
. 중복된 파일이 많이 있습니다. 모두 그대로 유지되어야 합니다. 또한 이라는 디렉토리가 있는데 그 안에 있는 /watchfolder/
모든 파일을 삭제하고 싶습니다 .watchfolder
/srv/
나는 그것을 시도했고 fdupes -r srv/ watchfolder/
그 반대도 마찬가지였습니다. 하지만 내 파일이 계속 엉망이 되고 있어요 srv/
.
답변1
Fdupes를 재귀적으로 사용할 때 필터링
중복된 항목이 여러 개인 경우 다음과 같은 결과가 나올 수 있습니다.
srv/foo
srv/a/b/foo
watchfolder/foo
watchfolder/c/foo
watchfolder/d/foo
이 경우 발견된 첫 번째 중복 항목(예: srv 항목에서 최소 중첩 깊이와의 일치 항목)만 유지하려는 경우가 아니면 더 스마트한 규칙을 적용하기 위해 중복 항목 목록을 필터 또는 셸 스크립트에 공급해야 합니다. 이것이 당신이 원하는 것이라면:
fdupes --recurse --delete srv/ watchfolder/
작동합니다. 모든 것을 srv/에 보관하려는 등 더 복잡한 경우에는 다음과 같은 필터 사용을 고려하세요.
fdupes --recurse srv/ watchfolder/ | sed '/^srv/d; /^$/! s/.*/"&"/' | xargs rm
답변2
fdupes는 타임스탬프가 가장 빠른 첫 번째 파일을 유지합니다. 도움말의 지침이 약간 오해의 소지가 있습니다.
$ ll foo/ bar/
bar/:
total 12
-rw-rw-r--. 1 BriGuy BriGuy 2 Jul 23 16:10 a
-rw-rw-r--. 1 BriGuy BriGuy 102 Jul 23 16:22 b
-rw-rw-r--. 1 BriGuy BriGuy 610 Jul 23 16:23 c
foo/:
total 12
-rw-rw-r--. 1 BriGuy BriGuy 2 Jul 23 16:10 a
-rw-rw-r--. 1 BriGuy BriGuy 102 Jul 23 16:11 b
-rw-rw-r--. 1 BriGuy BriGuy 610 Jul 23 16:22 c
$ fdupes foo/ bar/
foo/b
bar/b
foo/c
bar/c
# in above foo/b and foo/c would be kept
$ cp bar/c foo/c
$ fdupes foo/ bar/
bar/c
foo/c
foo/b
bar/b
# in above foo/b and bar/c would be kept,
# as bar/c has an earlier timestamp than foo/c now