IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Copie et renommage de fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Par défaut Copie et renommage de fichier
    Bonsoir,

    Pour ma bibliothèque multimédia j'utilise des pochettes au nom folder.jpg.

    Mais un nouveau lecteur me demande cover.jpg

    Il me faut donc garder les deux.

    Pour faire ca je dois parcourir tous les répertoires avec folder.jpg et les copier en les renommant tous en cover.jpg

    J'ai essayer plusieurs choses mais à chaque fois je bloque sur les espaces entre les noms.

    J'ai par ex :

    cp: impossible d'évaluer «./Various/Celtic»: Aucun fichier ou dossier de ce type
    cp: impossible d'évaluer «Punk»: Aucun fichier ou dossier de ce type
    cp: impossible d'évaluer «Songs/cover.jpg»: Aucun fichier ou dossier de ce type

    avec find . -name "folder.jpg" -exec cp {} `echo {} | sed "/folder/s//cover/"` \;ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "folder.jpg" | while read l ; do cp "$l" `echo "$l" | sed "/folder/s//cover/"` ; done
    j'ai aussi essayé avec basename et dirname mais j'avoue que je bloque ...

    Une idée ? Merci d'avance !

  2. #2
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Par défaut
    bon et bien il me semble avoir trouvé il faut passer execdir à find ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "cover.jpg" -execdir cp {} folder.jpg \;

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par biggir Voir le message
    bon et bien il me semble avoir trouvé il faut passer execdir à find ...

    find . -name "cover.jpg" -execdir cp {} folder.jpg \;
    Salut
    Je ne connais pas l'option "execdir" mais normalement, "exec" devrait marcher dans ton cas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "cover.jpg" -exec cp {} folder.jpg \;
    Accessoirement, c'est dommage de copier tout le fichier pour une bête histoire de nom (les liens c'est pas fait que pour faire joli !!!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "cover.jpg" -exec ln {} folder.jpg \;
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Par défaut
    salut,

    1/ en tout cas sur mon ubuntu il aime pas le cp quand il y a des espaces ...

    2/ c'est pour mettre sur un lecteur mp3 je ne suis pas sur qu'il connaisse les ln mais en effet je l'avais pas précisé

    A+

  5. #5
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Par défaut
    Mais bon j'ai le meme probleme quand je veux copier des repertoires toujours ces foutus espaces

    je viens de retester ...

    peut etre encoder tous les caracteres spéciaux dont espace ?

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par biggir Voir le message
    salut,

    1/ en tout cas sur mon ubuntu il aime pas le cp quand il y a des espaces ...
    Le shell en général n'aime pas les espaces dans les noms de fichier car il s'agit d'un séparateur d'élément. Mais ça peut se gérer facilement dans la forme cp "nom avec espace" "autre nom avec espace". Bon, je tape à capella (pas connecté sous Linux pour tester) mais un truc de ce genre find . -name "cover.jpg" -exec cp \"{}\" \"folder.jpg\" \; devrait fonctionner. Sinon je regarderai en détail.

    Citation Envoyé par biggir Voir le message
    2/ c'est pour mettre sur un lecteur mp3 je ne suis pas sur qu'il connaisse les ln mais en effet je l'avais pas précisé
    Tu es bien sur un Linux au départ. D'après ce que j'ai compris, tu veux créer un second nom nommé "folder.jpg". Là le ln fonctionne. Et si ensuite tu veux copier ce "folder.jpg" sur ton mp3, alors un cp fonctionnera aussi.
    Evidemment si tu veux copier le fichier "cover.jpg" sur ton mp3 direct, bien entendu le ln ne fonctionne plus (en plus il s'agit de FS différents)

    Citation Envoyé par biggir Voir le message
    Mais bon j'ai le meme probleme quand je veux copier des repertoires
    D'après ce que j'avais compris, il s'agissait de fichiers. Si tu veux copier des répertoires entiers, alors là non seulement ln ne fonctionnera pas mais en plus un cp simple ne fonctionnera pas non plus !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Par défaut
    pour le copie et renommage ça fonctionne bien.

    Par contre c’était un deuxième problème (j'aurais du peut-être ouvrir un deuxième post) pour copier aléatoirement des répertoires dans un autre.

    Comme j'avais ce soucis d'espace (même avec des guillemets) je suis passé par des inodes et là ça roule :

    je récupère l'inode (dans une boucle avec un `ls -FRQ | grep '/$' | wc -l` pour le nombre de répertoires)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inode=`ls -FRil | grep '/$' | cut -d" " -f1 | head -n $x | tail -1`
    et je le copie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -inum $inode -exec cp -r --parents {} $rep_cible \;
    bon c'est peut être pas très propre mais avec mon niveau je suis content que ça marche déjà !

  8. #8
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Par défaut
    desolé de dérivier un peu quand meme mais il ne manque plus qu'une chose :

    ne recuperer que les sous repertoires :

    car mon ls -FRil | grep '/$' me recupere tous les repertoires alors que je veux juste les sous répertoires
    c'est mon grep qu'il faut que j'ameliore


    ./rep1
    ./rep1/rep11
    ./rep1/rep12
    ./rep2
    ./rep2/rep21

    je ne veux que les repXX ....

    je vais peut etre m'orienter vers un find car il me semble qu'un puisse faire un -depth

  9. #9
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Par défaut
    bon et bien en fait j'ai une astuce qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -FRl | grep '/$' | grep " 2 "
    ce 2 me permet de ne récupérer que les répertoires qu'il me faut qui ne contiennent que mes fichiers (il faut par contre que ce soit carré et pas de répertoires qui trainent par hasard)

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 683
    Par défaut
    Bonjour,

    tu devrais te pencher sérieusement sur le man de find, plutôt que de bricoler.

    {} protège les espaces dans les chemins et les noms de fichiers, les guillemets ne sont donc pas nécessaires.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par biggir Voir le message
    desolé de dérivier un peu quand meme mais il ne manque plus qu'une chose :

    ne recuperer que les sous repertoires :

    car mon ls -FRil | grep '/$' me recupere tous les repertoires alors que je veux juste les sous répertoires
    c'est mon grep qu'il faut que j'ameliore


    ./rep1
    ./rep1/rep11
    ./rep1/rep12
    ./rep2
    ./rep2/rep21

    je ne veux que les repXX ....

    je vais peut etre m'orienter vers un find car il me semble qu'un puisse faire un -depth
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -mindepth 2 -maxdepth 2...
    Citation Envoyé par N_BaH Voir le message
    {} protège les espaces dans les chemins et les noms de fichiers, les guillemets ne sont donc pas nécessaires.
    Merci de ta précision
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Par défaut
    ok merci pour toutes ces infos !

    Je fais quelque chose de finalise et vous mets le code pour ceux que ca interesse ... ou pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] copie + renommage de fichiers sur un répertoire réseau
    Par PoichOU dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/03/2014, 15h28
  2. probléme copie ou renommage de fichier
    Par catalunya dans le forum Général Java
    Réponses: 4
    Dernier message: 30/03/2011, 11h17
  3. Copie et renommage d'un fichier simultanément
    Par OphyTe dans le forum ANT
    Réponses: 1
    Dernier message: 30/07/2010, 18h38
  4. copie et renommage de fichiers avec leur extension
    Par TaleMaker dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2009, 17h06
  5. parcourir des tableaux pour faire des copies/renommages de fichiers
    Par Paloma dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 31/10/2006, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo