Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > Unix

Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix

Réponse
 
Outils de la discussion
Vieux 07/05/2008, 10h53   #1 (permalink)
Invité régulier
 
Date d'inscription: mars 2008
Messages: 12
Par défaut nom de fichier plus court

Bonjour,

je débute en Unix et je rencontre le problème suivant:

je suis dans une boucle FOR et je voudrais obtenir une variable filecourt qui soit les 4 premiers caractères de filelong + son extension (ici ".dat")

le script est comme ceci:

for filelong in `ls ${ALU_STC}/*.dat`
do
...
done


où ${ALU_STC}/ est le chemin de mes fichiers .dat

exemple:
ALU_STC=/data
filelong a alors la valeur /data/titi_123456789.dat
et je voudrai obtenir: titi.dat

chaque fois que j'ai essayé de faire une action, il travaille sur les donnéesdu fichier mais pas ur le nom du fichier.

Merci pour votre aide
flyerman_2 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/05/2008, 12h31   #2 (permalink)
Membre Expert
 
Avatar de frp31
 
Date d'inscription: juillet 2006
Localisation: toulouse
Messages: 1 474
Par défaut

tu y était presque oui

pour tout dans liste
faire
mv chemin/fichierlong chemin/$( echo $(lister fichierlong couper à 4 ; couper à .+3))
fin

L'idée est de faire de la découpe des 3 éléments dans une

Code :
ext=$(echo $filelong | cut -d"." -f2)
corp=$(echo $filelong | awk -F "/" '{print $NF}' | cut -c1-4)
mv ${filelong} $(echo ${corp}'.'${ext})
exemple :
Code :
XS1:root #mkdir /tmp/test
XS1:root #for i in 1 2 3 4 5 6 ; do touch /tmp/test/tit${i}123456789.dat ; done
XS1:root #ls /tmp/test
tit1123456789.dat  tit2123456789.dat  tit3123456789.dat  tit4123456789.dat  tit5123456789.dat  tit6123456789.dat
XS1:root #ALU_STC=/tmp/test 
XS1:root #for filelong in `ls ${ALU_STC}/*.dat`
> do
> ext=$(echo $filelong | cut -d"." -f2)
> corp=$(echo $filelong | awk -F "/" '{print $NF}' | cut -c1-4)
> mv ${ALU_STC}/${filelong} ${ALU_STC}/$(echo ${corp}'.'${ext})
> done
XS1:root #cd /tmp/test
XS1:root #ls *.dat
tit1.dat  tit2.dat  tit3.dat  tit4.dat  tit5.dat  tit6.dat
__________________
Bye @+
(\__/)
(o..o)
(") (")

Soutenez le logiciel libre

Dernière modification par frp31 ; 07/05/2008 à 12h49
frp31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/05/2008, 14h33   #3 (permalink)
Invité régulier
 
Date d'inscription: mars 2008
Messages: 12
Par défaut

parfait,

j'ai adapté un peu car le nom de fichier était forcément pas titi, mais ça marche très bien.

Merci
flyerman_2 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/05/2008, 15h30   #4 (permalink)
Membre Expert
 
Avatar de frp31
 
Date d'inscription: juillet 2006
Localisation: toulouse
Messages: 1 474
Par défaut

ah ?
tu as pas 1000 fichiers titi toto tatat foo bar et autres onomatopés sur ta machine et dans /tmp en particulier ? ça viendra ....
__________________
Bye @+
(\__/)
(o..o)
(") (")

Soutenez le logiciel libre
frp31 est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > Unix



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 04h17.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2008 www.developpez.com - Legal informations