Bonjour,
J'ai une centaines de fichiers du type:
fichier001-bob-05.xml
fichier008-bab-09.xml
...etc
J'aimerais copier ces fichiers dans le même dossier mais sans la fin (-05 et -09) et je ne sais pas comment faire
Merci d'avance.
Bonjour,
J'ai une centaines de fichiers du type:
fichier001-bob-05.xml
fichier008-bab-09.xml
...etc
J'aimerais copier ces fichiers dans le même dossier mais sans la fin (-05 et -09) et je ne sais pas comment faire
Merci d'avance.
est ce que tous tes fichiers sont du types :
et tu cherches à virer part3 à chaque fois ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <part1>-<part2>-<part3>.xml
Oui,oui c'est exactement sa.
Mais cette partie 3 en question n'est jamais la même.
Merci.
et part1 et part2 sont les mêmes... je parie...
essaie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cp $(ls <part1>-<part2>-*) $(ls <part1>-<part2>-* | cut -d \- -f 3)
Non en fait ça n'est pas cela.
J'ai une liste de fichiers du type:
bob1-20-40.xml
bob8-45-12.xml
bob45-87-62.xml
....etc
Le seul point commun entre les fichiers est "bob".
Comment faire pour me retrouver avec cela: bob_i40
bob_i12
et bob_i62
En prenant donc le 3eme chiffre et en rajoutant _i derriere bob.
Désolé je me suis trompé de question en ecrivant tout à l'heure.
Merci
alors:
(je sais c'est moche mais bon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cp $(ls bob*) /le/path/bob_i$(ls bob* | cut -d \- -f 3))
Merci c'est parfait!
En fait sa ne marche pas.
Je me suis dis qu'en trifouillant sa allait marcher mais il me dit qu'il ne connait pas la commande cut et cp et les parenthese ne sont pas "expected".
Je ne comprend pas trop.
Help!
Merci.
Euh non ça c'est pas possible. Les commandes "cut" et "cp" sont des commandes totalement standard qu'on trouve de partout. Tente de taper en direct
Code : Sélectionner tout - Visualiser dans une fenêtre à part cut
Si ça ne marche pas (cut: command not found) contacte ton administrateur système et demande-lui de vérifier ton PATH
Code : Sélectionner tout - Visualiser dans une fenêtre à part cp
Il se peut que tu sois sur un Bourne Shell de base qui ne connait pas la syntaxe $(commande). Si c'est ça, alors remplace
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part cp $(ls bob*) /le/path/bob_i$(ls bob* | cut -d \- -f 3)
Mais perso j'ai un doute sur le résultat que ça va donner car ton but est de remplacer chaque fichier par un autre et aucune commande ne peut faire ça en une ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part cp `ls bob*` /le/path/bob_i`ls bob* | cut -d \- -f 3`
Moi, je serais d'avis de passer par un script
Donc comme je l'ai dit, un script qui traite chaque fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #!/bin/sh ls bob*.xml |while read fic do echo $fic num=`basename $fic ".xml" |cut -f3 -d\-` # Faut-il vraiment un backslash devant "-" ? cp "$fic" "bob_i$num" done
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]
Oui le backslash était nécessaire.
Mais je ne comprend pas pourquoi.A quoi sert-il?
En tout cas un grand merci.
Peus tu m'expliquer la premiere commande?
celle avec le read et le ls.
J'ai l'impression quelle met dans le echo la liste des fichiers.
Enfin c'est bizarre je suis pas très bon c'est pour sa que je demande tant d'explications.
Encore merci.
Certains caractères sont interprétés et transformés par le shell. Par exemple l'étoile. Tente de taper
t'auras pas d'étoile au résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo *
Le backslash a pour but de demander au shell de ne pas transformer le caractère qui le suit
Suis étonné car il ne me semblait pas que le "-" fasse partie de cette catégorie de caractères...
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo \*
Le ls envoie dans le pipe son résultat c'est à dire la liste des fichiers séparés par un <return>.
Le read lit toute l'entrée standard jusqu'au <return>. Et l'entrée standard vient du pipe.
Donc le read lit le pipe et s'arrête au premier <return>. Il stocke dans la variable ce qui a été lu (le nom de fichier). Et comme il a lu il renvoie "vrai" et le while fait son traitement. Pendant ce temps le pipe a été vidé des caractères lus (le premier nom).
Puis le read lit de nouveau le pipe et récupère le nom suivant. Et ainsi de suite.
Une fois le pipe vidé, le read ne lit plus rien et renvoie "faux". Le while s'arrête.
Moyen simple pour traiter n'importe quel flux entrant ligne par ligne.
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]
Ok super j'ai compris.
Merci beaucoup!
Partager