удалить дубликаты файлов

На моей Mac OS X 10.6.7 iTunes дублировал каждый отдельный файл в моей музыкальной библиотеке. Теперь у меня есть 3,840 файлов вместо 1,920. Проблема в том, что 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 ?

Как мне это сделать?

Есть ли простое решение?

2 Solutions collect form web for “удалить дубликаты файлов”

Что-то вроде этого, не испытали; это в bash, поэтому вам, возможно, придется преобразовать некоторый синтаксис:

 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 , чтобы быть уверенным, что это правильно.

Я также добавил бы, что для успешного поиска (и удаления) точных дубликатов файлов вам нужно сравнить файлы с помощью хэша:

 #!/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 и запустите его, deldupes.sh dirname как 1-й параметр (иначе будет использоваться $PWD ).

Протестировано на OS X, работает с длинными именами файлов с пустыми именами.

  • Как обойти локальный кеш youtube?
  • Ограничить поиск мест в определенных каталогах
  • Каковы эти процессы и почему я не могу их убить?
  • отправка справочной страницы MacOS в редактор
  • Как я могу установить команду `ll` в Mac OS X?
  • Двойная загрузка Fedora 16 с OS X refit
  • Почему, когда я вхожу в команду «hostname», она возвращает что-то другое, кроме имени моего компьютера?
  • Различные результаты OS X / Linux с «find PATH -mount \ (-type f -o-type d \) -print0 | LC_ALL = C sort --zero-terminated> OUTPUT.txt "
  • Как удовлетворить требуемые зависимости, чтобы установить ожидаемое расширение pecl на Mac OS X?
  • Разница в расчете размера каталога
  • Подключиться к Webdav (https) с помощью домена \ пользователя
  • Linux и Unix - лучшая ОС в мире.