web-dev-qa-db-fra.com

Comment Titre de la série Grep à partir de la liste des chemins?

J'ai la commande suivante:

find /home/cas/plex-media/series/ -type f -name '*.srt' | grep -v .en.srt

Qui va trouver tout .srt fichiers, qui ne sont pas .en.srt Dans le répertoire et les sous-répertoires de series.

Cela me donnera une liste qui pourrait ressembler à ceci:

/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

Ceci est une version simplifiée. Il pourrait y avoir 5 ou 300 sorties, où il pourrait y avoir 8 ou 50 fois Scorpion par exemple. La sortie varie beaucoup.

J'essaie de trouver une commande (que je pouvais tuyer derrière la commande d'origine), cela me donnera le résultat:

Scorpion, Devs, Modern Family

Et pas:

Scorpion, Scorpion, Scorpion, Scorpion, Devs, Devs, Modern Family, Modern Family, Modern Family, 
Modern Family, Modern Family, Modern Family, etc.. 

Vous avez eu l'idée. Pour chaque spectacle, une sortie. Pas pour chaque fichier.

Il peut être dans une autre mise en page. Peu importe que je préfère la mise en page ci-dessus).

J'ai essayé avec Grep mais je ne peux tout simplement pas le faire. Donc, je demande essentiellement: avez-vous une idée de la façon dont je pourrais obtenir la sortie ci-dessus?

Merci.

2
Cas

En supposant que le délimiteur entre le titre de la série et le reste du nom de fichier est un espace-espacement cohérent, vous pouvez faire quelque chose comme ça avec AWK:

find . -type f -name '*.srt' ! -name '*.en.srt' -printf '%f\0' | 
  awk -v RS='\0' -F ' - ' '!seen[$1]++{print $1}' | paste -sd,

Le !seen[$1] CONSTRUCTION DELUBLE DUPLIDE LES RÉSULTATS. La commande finale paste active la sortie d'une liste délimitée à une liste délimitée par des virgules.

1
steeldriver