logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 20-01-2013 16:25:08

mladen
Membre
Inscription : 30-10-2012

[Résolu] extraire les fichiers d'une liste de lecture

Bonjour,


j'ai une liste de lecture de 250 morceaux sur Banshee, et j'aimerai télécharger d'un coup tout les fichiers dans un dossier, banshee propose de télécharger la liste de lecture au format m3u, pls et xspf.

je précise que les fichiers de cette liste de lecture sont dans mon dossier Musique, et pas sur le net.

j'ai essayé en ouvrant le fichier pls avec brasero, puis créer une image .bin et .cue, ensuite convertir cette image en .iso avec bchunk, mais ça me donne des fichier .cdr, avec bchunk toujours j'ai essayé de sortir les fichiers en .wav, mais les fichiers étaient inaudibles ; essayé aussi de convertir en .iso avec iat comme expliqué http://doc.ubuntu-fr.org/tutoriel/conve … bin_et_cue, mais au bout de plusieurs heures : message d'erreur.

j'ai essayé aussi de monter l'image .bin, mais sans succès.., peut être que brasero a fait une erreur..

n'est il pas possible de télécharger les fichiers de la liste de lecture, depuis le dossier musique vers un autre ? il parait que c'est possible depuis internet avec un fichier m3u et wget.

si vous avez des idées, merci de vos réponses..

Dernière modification par mladen (22-01-2013 22:48:44)

Hors ligne

#2 20-01-2013 19:53:19

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Bonsoir

Si j'ai bien compris, tu souhaite déplacer des fichiers musicaux d'un dossier vers un autre.
Les fichiers m3u sont de simple fichiers texte contenant les chemins des différents morceaux. Il doit donc être possible de faire un petit script bash qui effectue cette copie à partir d'un fichier m3u.

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#3 20-01-2013 21:49:10

mladen
Membre
Inscription : 30-10-2012

Re : [Résolu] extraire les fichiers d'une liste de lecture

ok, mais qu'est ce qu'il faut écrire dans le script ?

Hors ligne

#4 20-01-2013 21:52:09

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Si j'ai bien compris :
Tu as un dossier musique où se trouve tes morceaux et tu souhaites copier ceux de ta liste de lecture vers un autre dossier. C'est bien ça ?

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#5 20-01-2013 21:56:54

mladen
Membre
Inscription : 30-10-2012

Re : [Résolu] extraire les fichiers d'une liste de lecture

oui, c'est ça

Hors ligne

#6 20-01-2013 22:01:20

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Super smile

Commence par créer ton fichier m3u.

Puis, postes nous le début du fichier histoire qu'on puisse voir à quoi il ressemble, notamment si les chemins des fichiers sont relatifs ou absolus.

Tu peux faire ça avec la commande

head liste.m3u


où tu remplaces liste.m3u par le nom de ton fichier


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#7 20-01-2013 22:06:23

mladen
Membre
Inscription : 30-10-2012

Re : [Résolu] extraire les fichiers d'une liste de lecture

ça donne :

maya@debian:~$ head Bureau/1.m3u
#EXTM3U
#EXTINF:137,? - truc1
../../../media/data/Musique/Punk_Hardcore_Métal_Rock_Pop/trucs/truc1.mp3
#EXTINF:124,Absurd - Mourning Soul
../../../media/data/Musique/Punk_Hardcore_Métal_Rock_Pop/Absurd/Der Funfzehnjahrige Krieg/05. Mourning Soul.mp3
#EXTINF:206,AD:keY - AD-KEY Agro's baby
../../../media/data/Musique/Punk_Hardcore_Métal_Rock_Pop/AD:keY/AD-KEY Agro's baby.mp3
#EXTINF:305,AD:keY - Pissed Off
../../../media/data/Musique/Punk_Hardcore_Métal_Rock_Pop/AD:keY/Thats It (2010)/03_adkey-pissed_off.mp3
#EXTINF:265,AD:keY - Stalker
maya@debian:~$

Hors ligne

#8 20-01-2013 22:13:38

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Bon dommage, c'est des chemins relatifs et en plus, il y a des commentaires hmm Ca sera un peu plus compliqué pour un débutant en bash comme moi mais on va y arriver smile

Est ce que le chemin absolu de tons dossier Musique est bien /media/data/Musique ?

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#9 20-01-2013 22:57:16

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Bon ben je pense avoir trouvé une commande qui peut t'aider. Reste à savoir le chemin absolu de ton dossier Musique et le dossier de destination.

Si ton dossier Musique est bien /media/data/Musique, tu peux faire comme cela

cp  "$(sed -e "/#/d" -e "s/..\/..\/..//" Bureau/1.m3u) /dossier/de/destination


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#10 21-01-2013 01:28:24

mladen
Membre
Inscription : 30-10-2012

Re : [Résolu] extraire les fichiers d'une liste de lecture

wow, merci, par contre j'aime bien comprendre ce que je tape en console..

en fait,

"$(sed -e "/#/d" -e "s/..\/..\/..//" Bureau/1.m3u)

c'est la source ?

a quoi sert la commande sed exactement ? et le $ et les "" et les ( ), \ /, .., etc..?

Dernière modification par mladen (21-01-2013 01:35:34)

Hors ligne

#11 21-01-2013 01:46:34

mladen
Membre
Inscription : 30-10-2012

Re : [Résolu] extraire les fichiers d'une liste de lecture

je viens d'essayer avec une liste de lecture de 4 fichiers, et ça ne marche pas, ça fait ça :

maya@debian:~$ cp  "$(sed -e "/#/d" -e "s/..\/..\/..//" Bureau/2.m3u Bureau/kk
>

et rien n'est copié.

Hors ligne

#12 21-01-2013 06:53:52

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Résolu] extraire les fichiers d'une liste de lecture

commande sed, il faut chercher dans le wiki df.
Tu peux y avoir accès sur le bandeau en ouvrant l'onglet Wiki.
Non ?
Et si !


Ensuite, tu tapes sed dans la case de la recherche du wiki et tu auras accès au tuto sur sed.
Ah ?
Et oui !


Si tu n'en comprends pas les explications, tu nous fais un retour ici, nous corrigerons ou complèterons le tuto en conséquence.
Participer au wiki, c'est aussi cela.

Wouap ! big_smile

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#13 21-01-2013 06:55:39

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Oups, j'ai oublié un " après la parenthese

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#14 21-01-2013 14:55:31

mladen
Membre
Inscription : 30-10-2012

Re : [Résolu] extraire les fichiers d'une liste de lecture

en rajoutant le " ça donne ça :

maya@debian:~$ cp "$(sed -e "/#/d" -e "s/..\/..\/..//" Bureau/2.m3u)" Bureau/e
cp: impossible d'évaluer « /media/data/Musique/Punk_Hardcore_Métal_Rock_Pop/Gjallarhorn/Ranarop/Gjallarhorn - 06 - Solbon Askan (Prayer For Sun Thunder).mp3\n/media/data/Musique/Classique/Schubert/Masterworks/10/03 - String Quartet in A minor D804 'Rosamunde' - Menuetto, allegro.flac\n/media/data/Musique/Classique/Schubert/The Best Of Schubert/04-schubert-symphony_no_8_in_b_minor_d_759_unfinished_allegro_moderato-lvy.mp3 »: Aucun fichier ou dossier de ce type
maya@debian:~$

et rien n'est copié.

j'ai pas trouvé a quoi sert #)(\../"

dans le wiki de sed, ya marqué que le $ indique la dernière ligne du fichier traité... pourquoi le mettre la ?

Dernière modification par mladen (21-01-2013 14:57:37)

Hors ligne

#15 21-01-2013 21:04:02

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Bonsoir

Le problème vient du fait qu'il y a des espaces dans le nom de tes fichiers. Et bash n'aime pas les espaces. Du coup, on doit les échapper avec les guillemets (celles que j'avais oublié).
Mais dans ce cas, le saut de ligne n'est plus interprété ( c'est le \n entre les deux fichiers). Si un pro du bash a une idée, ça serait pas mal. Sinon, je vais essayer en python smile

Pour l'explication de ce que je voulais faire :

les 2 commandes de sed sont :

  • "/#/d" = supprime toutes les lignes qui commence par #

  • "s/..\/..\/..//" = remplace ../../.. par rien (supprime ../../.. en fait wink ). Le problème, c'est que dans la syntaxe de sed, les / sont les séparateurs. Si on doit les utiliser en tant que caractère, il faut les échapper, c'est à dire mettre \ devant.


sed te renvoyait donc une liste des chemins absolus de tes fichiers sans les commentaires du fichier m3u à la commande cp.

Comme il y a des espaces dans tes nom de fichiers, il fallait faire en sorte que cp prenne chaque ligne comme un nom de fichier et non seulement le début du nom avant l'espace, d'ou le "$(sed ...)". Se pose alors le problème des saut de ligne hmm

Smolski a écrit :

commande sed, il faut chercher dans le wiki df



C'est ma première utilisation de sed. Donc pas mal le wiki cool


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#16 21-01-2013 22:22:12

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Tu peux essayer ça en python. Il suffit de copier ça dans un fichier (par convention avec l'extention .py), de le rendre exécutable et de donner en premier argument ta liste de lecture et en deuxième argument ton dossier de destination smile
J'ai fait un essai rapide et ça semble fonctionner. Espérons qu'il n'y ait pas  de caractères exotiques dans tes noms de fichiers tongue

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os,sys,shutil

if os.path.isfile(sys.argv[1]):
  fichier_liste=sys.argv[1]
else:
  print "La liste de lécture n'existe pas"
 
if os.path.isdir(sys.argv[2]):
  dest=sys.argv[2]
else:
  print "Le dossier de destination n'existe pas"
 

ll=open(fichier_liste) #Ouvre ton fichier m3u donné comme premier argument au script
for ligne in ll.readlines(): #Lit le fichier m3u ligne par ligne
  print len(ligne)
  if ligne[0] != "#" and len(ligne)>1: #Sila ligne ne commence pas par #
    shutil.copy2(ligne[8:-1],dest) #copie le fichier dont on enlève les ../../..  et le \n de la fin dans le répertoire donné en argument
ll.close()


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#17 21-01-2013 23:35:31

mladen
Membre
Inscription : 30-10-2012

Re : [Résolu] extraire les fichiers d'une liste de lecture

ça fait ça :

maya@debian:~$ ./Bureau/script.py
Traceback (most recent call last):
  File "./Bureau/script.py", line 5, in <module>
    if os.path.isfile(sys.argv[1]):
IndexError: list index out of range
maya@debian:~$

Hors ligne

#18 22-01-2013 08:04:29

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Il faut faire ./Bureau/script.py liste_lecture dossier_destination avec des chemins absolus pour plus de certitudes

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#19 22-01-2013 08:10:41

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Résolu] extraire les fichiers d'une liste de lecture


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#20 22-01-2013 22:48:11

mladen
Membre
Inscription : 30-10-2012

Re : [Résolu] extraire les fichiers d'une liste de lecture

ça marche, un grand merci, et longue vie à debian !

Hors ligne

#21 27-01-2013 20:31:22

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [Résolu] extraire les fichiers d'une liste de lecture

Oui Debian donne envie d'apprendre quelques rudiment de programmation smile

Voilà donc le code en Python un peu plus adaptable (il peut y avoir autant de ../ que l'on veut avant le nom du fichier). La surpression du saut de ligne me semble toujours être du bricolage mais ça fonctionne.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os,sys,shutil

def usage():
  print "Usage : copie.py liste_de_lecture repertoire_de_destination"

if len(sys.argv) <> 3: # Vérifie que le nombre d'argument est bon
  usage()
  quit()
 
if os.path.isfile(sys.argv[1]):
  fichier_liste=sys.argv[1]
else:
  usage()
  quit()
 
if os.path.isdir(sys.argv[2]):
  dest=sys.argv[2]
else:
  usage()
  quit()
 

ll=open(fichier_liste,'U') #Ouvre ton fichier m3u donné comme premier argument au scipt
for ligne in ll.readlines(): #Lit le fichier m3u ligne par ligne
  if ligne[0] != "#" and len(ligne)>1: #Sila ligne ne commence pas par #
    shutil.copy2(ligne.replace('\n','').split("..")[-1],dest) #copie le fichier dont on enlève les ../../..  et le \n de la fin dans le répertoire donné en argument
ll.close()
 



Et la même chose en Perl qui semble disposer des outils pour faire le boulot, notamment abs_path et chomp

#!/usr/bin/perl
use warnings;
use strict;
use File::Copy;
use Cwd qw/ abs_path /;

sub usage{ #Fonction affichant la syntaxe de la commande
print "Usage : copie.pl liste.m3u dossier_destination\n";}

my $nbarg = @ARGV; #Nombre d'argument
if ($nbarg != 2 or ! -e $ARGV[0] or ! -d $ARGV[1]) #Vérification des arguments passés à la commande : 2 argument, le premier est un fichier existant, le second un dossier existant
{
  usage();
  exit();
}

open FILE, "< $ARGV[0]" or die "Problème lors de l'ouverture de $ARGV[0] !\n"; #Ouvre le fichier liste de lecture donné comme premier argument
while (my $ligne=<FILE>) #Lit le fichier ligne par ligne
{
  if ($ligne !~ /^#/) #Si la ligne n'est pas un commentaire
  {
    my $abs=abs_path($ligne); #Récupère le chemin absolu
    chomp $abs ; #Supprime le retour chariot en fin de ligne
    copy("$abs", $ARGV[1]) or die "Erreur lors de la copie du fichier $abs : $!\n";#Copie le fichier ou reporte l'erreur si problème
  }
}
close FILE; #Ferme le fichier
 



J'ai toujours pas trouvé en bash


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#22 08-02-2015 14:03:50

jimdeb
Membre
Inscription : 08-02-2015

Re : [Résolu] extraire les fichiers d'une liste de lecture

Bonjour à tous !

Merci pour la solution proposée ci-dessus !

J'ai réussi à utiliser le programme en Perl, celui en Python me sortant des erreurs que ne je peux corriger.

J'arrive donc bien à partir d'un liste de lecture en .m3u à copier les fichiers de la liste dans un autre répertoire.

Mais j'aimerai avoir le raffinement suivant : est-il possible de numéroter les fichiers copiés pour obtenir quelque chose de ce type en fin de copie dans le répertoire destination :
001 - premier fichier musique de la liste
002 - second fichier musique de la liste
etc....

Je suppose que cela ne doit pas être très difficile (en mettant un compteur du nombre de fichiers copiés) mais étant peu spécialiste en programmation et encore moins en Perl je ne vois vraiment pas comment faire !

Je serai très heureux d'avoir une solution !
D'avance, grand merci !

Hors ligne

Pied de page des forums