백업에 문제가 있어서 이제 HD에 여러 개의 폴더가 있습니다. 나는 그대로 유지하고 싶은 하나의 기본 '폴더 트리'를 가지고 있습니다. fdupes가 삭제하고 싶지 않은 디렉터리의 파일을 삭제하지 못하도록 하려면 어떻게 해야 합니까?
또 다른 중복 찾기 유틸리티가 있나요?
답변1
또 다른 중복 찾기 유틸리티가 있나요?
사용rmlint, --keep-all-tagged 옵션을 사용하여 원하는 작업을 정확하게 수행합니다.
$ rmlint --types=duplicates --keep-all-tagged /path/to/dupes /other/path/to/dupes // main/folder/tree
답변2
프로세스 속도를 늦추고 주의를 기울이는 것이 어떨까요?
중복된 항목을 비교하여 fdupes
파일에 저장합니다.
fdupes -r /path/to/start > filesToDelete
그런 다음 자신의 속도에 맞춰 보관하려는 디렉터리나 파일을 제거할 수 있습니다.filesToDelete
전체 디렉토리를 제거하려면
sed -i '|/directoryToKeep/|d' filesToDelete
선호하는 텍스트 편집기에서 작업 filesToDelete
하고 원하는 각 파일의 복사본 시작 부분에 마커(아마도 x?)를 넣으세요.유지하다이를 통해 수행한 작업을 추적할 수 있으며 변경 사항이 확실해지면
cat aFile | xargs -d "\n" rm
rm
x가 있는 각 줄(및 에서 생성된 주석이나 다른 줄 fdupes
)에 오류가 발생하지만 해당 파일에는 아무 작업도 수행하지 않습니다. 그러나 에서 표시되지 않은 유효한 파일 이름 항목을 모두 삭제합니다 filesToDelete
.
답변3
다음은 주어진 첫 번째 디렉토리의 우선순위를 지정하는 짧은 스크립트입니다. 파일을 직접 삭제하지는 않으며 삭제할 목록만 인쇄합니다. 다음 규칙을 따릅니다.
- 다음의 파일을 인쇄하지 마세요.
dir1
에 없는 파일이 있으면
dir1
인쇄하지 마세요.#!/usr/bin/env bash # priority_dup.sh dir1 dir2 [dir3 ...]` set1=() # List collects all matching files for a set. IFS=$'\n' fdupes -r "$@" | while read i; do if [[ "$i" == "" ]]; then # Create new set, minus all files from dir1. set2="$(echo "${set1[*]}" | grep -v "^$1/")" # If the sets are different, then we can print files for deletion. if [[ "${set1[*]}" != "$set2" && "$set2" != "" ]]; then echo "$set2" echo "" set1=() fi else set1+=("$i") fi done
파일로 저장하고 파일을 실행 파일로 설정한 후 실행해 보세요.