I had to объединись several music directories, and have ended up with many удвойся поля. In instances where one is в .flac, гd like to get rid of the dupes and keep the .flac. гd like to only сравнил поля that пашите in the same folder, эксперт these represent альбомы, which is в useful way for я to organize my music.
гm running Ubuntu 15.10, with в bash shell.
I would appreciate your help with command line tools. Thanks so much,
Прежде чем я отвечу на Ваш вопрос, у меня есть некоторые предположения: Скажите, что у Вас есть каталог как это
$ ls -1 myMusics
music1
music1.flac
music1.mp3
music2.mp3
music2b.mp3
music3.flac
music4.flac
music4.wav
music5b.flac
music6
music6.mp3
music6.wav
В каталоге выше, только music1.flac
и music4.flac
дубликаты будут удалены, потому что music2.mp3
, music2b.mp3
, music3.flac
и music5b.flac
не имейте никаких дубликатов, которые будут удалены, и хотя music6
имеет дубликаты, не их имеют .flac
расширение. Я также предположил, что нет никакого файла такого как music1.backup.flac
в Вашем каталоге. Если такие файлы будут существовать, то их будут рассматривать как music1.flac
дубликаты (если таковые имеются).
На основе предположений можно сделать так:
$ shopt -s extglob
$ for i in `ls | egrep .flac$ | sed 's/\.flac$//'`; do rm "$i".!(flac);done 2>/dev/null
$ shopt -u extglob
Теперь давайте посмотрим то, что делают вышеупомянутые команды:
.flac
расширение в конце (ls | egrep .flac$
),.flac
от конца имени (| sed 's/\.flac$//
),.flac
расширение. rm "$i".!(flac)
удаляет каждый файл, который запускается с "$i"
и исключает тех, которые имеют .flac
расширение. Если Вы не работаете shopt -s extglob
(то есть, если Вы не включаете extglob
), шаблоны как "$i"!(.flac)
не будет иметь никакого особого значения и колотить поиски имени файла "$i"!(.flac)
точно. (имя "$i"
сопровождаемый !
и затем a (
и так далее.)extglob
использование shopt -u extglob
. Вы видите неотступно следование extglob
в man bash
:
Если опция оболочки extglob включена с помощью shopt встроенного, несколько расширенных операторов сопоставления с образцом распознаны. В следующем описании список шаблона является списком одного или нескольких шаблонов, разделенных |. Составные шаблоны могут быть сформированы с помощью одного или нескольких следующих подшаблонов:
- ? (список шаблона)
Нуль соответствий или одно возникновение данных шаблонов- * (список шаблона)
Нуль соответствий или больше случаев данных шаблонов- + (список шаблона)
Соответствия одни или несколько случаев данных шаблонов- (Список шаблона)
Соответствия один из данных шаблонов- ! (список шаблона)
Соответствия что-либо кроме одного из данных шаблонов
Кроме того, смотрите на это ТАК вопрос:
Как я могу использовать обратные или отрицательные подстановочные знаки, когда сопоставление с образцом в unix/linux окружает?