내 Mac OS X 10.6.7에서 iTunes는 내 음악 라이브러리의 모든 파일을 복사했습니다. 이제 1,920개가 아닌 3,840개의 파일이 있습니다. 문제는 iTunes가 단순히 전체 폴더를 복사하는 것이 아니라 각 폴더의 모든 파일을 복사하여 1
복사본에 추가한다는 것입니다.
├── album1
│ ├── track1.mp3
│ ├── track1 1.mp3
│ ├── track2.mp3
│ └── track2 1.mp3
└── album2
├── track1.m4a
└── track1 1.m4a
이제 1,920개의 중복 항목을 클릭하는 대신 터미널에 몇 가지 스마트 라인을 입력하여 중복 파일을 삭제하고 싶습니다.
find path/to/music/ -name "* 1.*" -delete
이는 대부분의 경우 작동하지만 다음과 같은 상황에서는 문제가 발생할 수 있습니다.
└── album2
├── track 1.mp3
└── track 1 1.mp3
"* 1 1.*"
나중에 이 파일을 제외하고 이름을 바꾸고, 중복된 파일을 삭제 해야 할까요 1
?
어떻게 해야 하나요?
간단한 해결책이 있습니까?
답변1
나는 또한 이것을 성공적으로 찾고 삭제하기 위해 추가할 것입니다.정밀한파일이 중복되었습니다. 해시 값으로 파일을 비교해야 합니다.
#!/bin/sh -eu
find "${1:-.}" -type f ! -empty -print0 | xargs -0 md5 -r | \
awk '$1 in a{sub("^.{33}","");printf "%s\0",$0}a[$1]+=1{}' | \
xargs -0 rm -v --
다른 이름으로 저장 deldupes.sh
하고 실행하여 디렉터리 이름을 첫 번째 인수(그렇지 않으면 $PWD
사용됨)로 전달합니다.
OS X에서 테스트되었으며 긴 공백 파일 이름에서 작동합니다.
답변2
이와 같은 것은 테스트되지 않았으므로 일부 구문을 변환해야 할 수도 있습니다.
IFS=$'\n' # so that only newlines separate words, not spaces
set -f # disable globbing
FILES=$(find path/to/music/ -name "* 1.*")
for FILE in ${FILES}; do
if [[ -f "${FILE% 1.*}" ]] ; do
echo "Matched ${FILE}."
# rm "${FILE}" # Uncomment me once you have confirmed it would do what you intend.
fi
done
${FILE% 1.*}
1.*
마지막으로 일치하는 구문을 끝에서 제거하고 [[ -f ... ]]
파일이 존재하는지 확인하여 끝에 구문이 없는 파일이 있는 파일을 제거합니다. 주석을 제거하기 전에 테스트하여 rm
올바른지 확인하십시오.