Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/08/2011, 21h42   #1
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 6
Points : 6
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 :
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 !
biggir est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/08/2011, 22h02   #2
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 6
Points : 6
bon et bien il me semble avoir trouvé il faut passer execdir à find ...

Code :
find . -name "cover.jpg" -execdir cp {} folder.jpg \;
biggir est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/08/2011, 02h13   #3
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
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 : 3 055
Points : 4 934
Points : 4 934
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 :
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 :
find . -name "cover.jpg" -exec ln {} folder.jpg \;
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/08/2011, 08h19   #4
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 6
Points : 6
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+
biggir est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/08/2011, 08h52   #5
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 6
Points : 6
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 ?
biggir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2011, 09h07   #6
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
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 : 3 055
Points : 4 934
Points : 4 934
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 !!!
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2011, 09h38   #7
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 6
Points : 6
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 :
inode=`ls -FRil | grep '/$' | cut -d" " -f1 | head -n $x | tail -1`
et je le copie

Code :
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à !
biggir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2011, 10h03   #8
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 6
Points : 6
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
biggir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2011, 10h32   #9
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 6
Points : 6
bon et bien en fait j'ai une astuce qui marche :

Code :
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)
biggir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2011, 10h46   #10
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
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_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 06/08/2011, 11h18   #11
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
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 : 3 055
Points : 4 934
Points : 4 934
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 :
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
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 09h22   #12
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 6
Points : 6
ok merci pour toutes ces infos !

Je fais quelque chose de finalise et vous mets le code pour ceux que ca interesse ... ou pas
biggir est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h43.


 
 
 
 
Partenaires

Hébergement Web