Лирическое отступление. Бывает такое, что в дискографии исполнителя встречаются одни и те же композиции, но записанные в разное время и в разных аранжировках. При прослушивании на плеере без использования псевдослучайного выбора всех композиций исполнителя, схожие композиции идут одна за другой и приходится слушать одну вещь несколько раз. Мне лично такое положение дел не нравится и поэтому я решил поискать пути решения, исходя из моего личного (!) желания слушать композицию в оригинале, а не в перепевках.
Внимание! Эта заметка не есть решение проблем, а лишь информация, как можно использовать командную строку. Более того, этот набор команд не стоит оформалять в виде скрипта, т.к. он расчитан на выполнение конкретного действия. Ещё поправка, все файлы одного исполнителя расположены и поименованы однообразно.
Путь решения таков:
for i in *; do if [ "x${i}" == "x*" ]; then break; fi;\ cret=$(echo ${i} | sed -e "s/[^\_]*\_\([^\.]*\)\..*/\\1/");\ find ../ -iname "*${cret}*" -not -path "*$(basename "$PWD")*" -exec rm {} \; ; done
Если появится необходимость и желание, в дальнейшем модифицирую и сделаю проход по каталогам с альбомами в цикле.
Теперь давайте попробуем понять, что же я "наваял". Для начала приведём эту строку в вид, который был бы в скрипте:
1 for i in *; 2 do 3 if [ "x${i}" == "x*" ]; then 4 break; 5 fi; 6 cret=$(echo ${i} | sed -e "s/[^\_]*\_\([^\.]*\)\..*/\\1/"); 7 find ../ -iname "*${cret}*" -not -path "*$(basename "$PWD")*" -exec rm {} \; ; 8 done
04_Tunnel_O_Love.mp3 06_Twisting_By_The_Pool.mp3 16_Local_Hero.mp3
после они превращались в такой вид:
Tunnel_O_Love Twisting_By_The_Pool Local_Hero
../
) начинаем поиск всех файлов, соответствующих критерию без учёта регистра (-iname "*${cret}*"
) и расположенных не в текущем каталоге (-not -path "*$(basename "$PWD")*"
), после нахождения совпадения, удаляем эти файлы (-exec rm {} \;
).