У меня есть следующая команда:
find /home/cas/plex-media/series/ -type f -name '*.srt' | grep -v .en.srt
, которая найдет все файлы .srt
, которые не находятся в .en.srt
в каталог и подкаталоги серии
.
Это даст мне список, который может выглядеть следующим образом:
/home/cas/plex-media/series/Scorpion/Season 4/Scorpion - S04E06 - Queen Scary.srt
/home/cas/plex-media/series/Scorpion/Season 4/Scorpion - S04E03 - Grow a Deer, A Female Deer.srt
/home/cas/plex-media/series/Devs/Season 1/Devs - S01E03 - Episode 3.srt
/home/cas/plex-media/series/Modern Family/Season 8/Modern Family - S08E21 - Alone Time.srt
Это упрощенная версия. Может быть 5 или 300 выходов, где, например, может быть 8 или 50 раз Скорпион. Вывод очень сильно различается.
Я пытаюсь найти команду (которую я мог бы передать за исходной командой), которая даст мне результат:
Scorpion, Devs, Modern Family
А не:
Scorpion, Scorpion, Scorpion, Scorpion, Devs, Devs, Modern Family, Modern Family, Modern Family,
Modern Family, Modern Family, Modern Family, etc..
Вы поняли. На каждое шоу - один выход. Не для каждого файла.
Может быть в другом макете. На самом деле это не имеет значения (хотя я бы предпочел макет выше)
Я пробовал использовать grep, но просто не могу этого сделать. Итак, я в основном спрашиваю: у вас есть идея, как я могу получить результат выше?
Спасибо.
Предполагая, что разделителем между заголовком серии и остальной частью имени файла является согласованный пробел-дефис-пробел, вы можете сделать что-то вроде этого с awk:
find . -type f -name '*.srt' ! -name '*.en.srt' -printf '%f\0' |
awk -v RS='\0' -F ' - ' '!seen[$1]++{print $1}' | paste -sd,
The !seen[$1]
конструкция дедуплицирует результаты. Последняя команда paste
превращает вывод из списка, разделенного новой строкой, в список, разделенный запятыми.