How to delete удвойся music поля where at least one версия is .flac

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,

2
задан 6 January 2016 в 05:12

1 ответ

Прежде чем я отвечу на Ваш вопрос, у меня есть некоторые предположения: Скажите, что у Вас есть каталог как это

$ 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

Теперь давайте посмотрим то, что делают вышеупомянутые команды:

  1. Второй перечисляет все файлы, которые имеют .flac расширение в конце (ls | egrep .flac$),
  2. затем удаляет .flac от конца имени (| sed 's/\.flac$//),
  3. затем для каждого из имен, которые являются результатом двух предыдущих шагов, удаляет все файлы, которые имеют то имя плюс расширение,
  4. за исключением тех, который имеет .flac расширение. rm "$i".!(flac) удаляет каждый файл, который запускается с "$i" и исключает тех, которые имеют .flac расширение. Если Вы не работаете shopt -s extglob (то есть, если Вы не включаете extglob ), шаблоны как "$i"!(.flac) не будет иметь никакого особого значения и колотить поиски имени файла "$i"!(.flac) точно. (имя "$i" сопровождаемый ! и затем a ( и так далее.)
  5. В конце можно отключить extglob использование shopt -u extglob.

Вы видите неотступно следование extglob в man bash:

Если опция оболочки extglob включена с помощью shopt встроенного, несколько расширенных операторов сопоставления с образцом распознаны. В следующем описании список шаблона является списком одного или нескольких шаблонов, разделенных |. Составные шаблоны могут быть сформированы с помощью одного или нескольких следующих подшаблонов:

  • ? (список шаблона)
    Нуль соответствий или одно возникновение данных шаблонов
  • * (список шаблона)
    Нуль соответствий или больше случаев данных шаблонов
  • + (список шаблона)
    Соответствия одни или несколько случаев данных шаблонов
  • (Список шаблона)
    Соответствия один из данных шаблонов
  • ! (список шаблона)
    Соответствия что-либо кроме одного из данных шаблонов

Кроме того, смотрите на это ТАК вопрос:
Как я могу использовать обратные или отрицательные подстановочные знаки, когда сопоставление с образцом в unix/linux окружает?

1
ответ дан 2 December 2019 в 04:59

Другие вопросы по тегам:

Похожие вопросы: