Creation de repertoires relatifs à des noms de fichiers - Shell/Batch - Programmation
Marsh Posté le 19-04-2006 à 00:47:03
# modifier la variable environnement IFS
# afin qu "echo" prenne en compte des retours ligne
# comme séparateur et non des espaces
OLDIFS=IFS
IFS='
'
for i in *.mpg; do mkdir `echo $i | awk -F " - " '{print $1}'`; done
#restauration de l environnement initial
IFS=OLDIFS
unset OLDIFS
Marsh Posté le 19-04-2006 à 11:21:40
skyofdiamonds a écrit : # modifier la variable environnement IFS |
T'es vraiment un dieu mec merci, merci, merci, ... ^^
Marsh Posté le 19-04-2006 à 12:41:33
skyofdiamonds a écrit : # modifier la variable environnement IFS |
Personnellement (mais cela ne regarde que moi), je n'aime pas toucher à l'IFS si je peux m'en passer. Ce n'est pas le cas ici mais imagine que dans le "for", l'IFS d'origine soit nécessaire...
soniclemolasson a écrit :
|
Le pb du for, c'est qu'il utilise l'IFS (l'espace par défaut) pour séparer ses éléments et que les noms des fichiers contiennent des espaces donc tu te retrouves pour un seul fichier avec une itération sur le début, et une sur la fin du nom.
Utilises donc la commande "read" qui, elle, sépare d'office chaque élément sur le "retour charriot" et qui, comble du bonheur, renvoie "faux" quand elle n"a rien lu...
ls *.mpg |while read i |
Plus élégant non ???
Marsh Posté le 19-04-2006 à 23:35:48
Sve@r a écrit : Personnellement (mais cela ne regarde que moi), je n'aime pas toucher à l'IFS si je peux m'en passer. Ce n'est pas le cas ici mais imagine que dans le "for", l'IFS d'origine soit nécessaire...
|
Tout à fait !
mais la commande read utilise aussi IFS
IFS Internal field separators, normally space, tab, and
new-line that are used to separate command words which
result from command or parameter substitution and for
separating words with the special command read. The
first character of the IFS variable is used to
separate arguments for the $* substitution (See Quot-
ing below).
et
read [ -prsu[ n ] ] [ name?prompt ] [ name ... ]
The shell input mechanism. One line is read and is
broken up into fields using the characters in IFS as
separators.
extrait dehttp://www.manpages.info/sunos/ksh.1.html
Marsh Posté le 20-04-2006 à 09:04:48
skyofdiamonds a écrit : Tout à fait ! |
Exact. Elle utilise l'IFS quand on tape
read x y z |
et qu'on rentre plusieurs mots. Là, elle utilise l'IFS pour séparer les mots et placer le premier dans "x", le second dans "y" et le reste de la ligne dans "z".
En fait, je n'ai pas dit qu'elle n'utilisait pas l'IFS (ou si je l'ai laissé entendre c'est bien involontaire...), j'ai dit que j'utilisais une propriété particulière de "read" qu'on n'a pas avec le "for" qui est de placer tout ce qui a été tapé jusqu'au retour charriot dans la variable demandée (ou dans la dernière variable dans le cas d'un "read x y z" ).
Grace à ça, je récupère dans "i" chaque ligne issue de "ls *.mpg" même si la ligne possède des espaces. Mais le fait de posséder cette propriété particulière n'empêche pas "read" d'utiliser, par ailleurs, l'IFS...
Marsh Posté le 18-04-2006 à 18:14:39
Bonjour a tous,
j'ai un petit soucis et je vous serai gré de bien vouloir me donner un coup de pouce Alors merci d'avance ^^
J'ai un certain nombre de fichiers dans un repertoire REP1... ces fichiers sont de la forme * - *.???
Prenons le cas de trois d'entre eux et nommons les "ile de la reunion - sequence plage.mpg" "ile de la reunion - sequence montagne.mpg" "anniversaire de bidule - sequence machin.mpg". Pour simplifier la compréhension un fichier sera ensuite désigné comme suit : préfixe-suffixe.ext
Je veux ecrire un tout petit script qui va me creer les repertoires "ile de la reunion" et "anniversaire de bidule" de manière expensive (comme j'ai une tonne de séquences et une tonne de préfixes, je n'ai pas envie de le faire a la main)
je commence donc par faire un test dans le repertoire en me plaçant a l'interieur de celui-ci avec quelque chose du genre :
ls *.mpg | awk -F " - " '{print $1}'
j'obtiens la liste suivante :
anniversaire de bidule
ile de la reunion
ile de la reunion
jusque là ça va ^^
pour pouvoir creer les repertoires je met tout ca dans un boucle for ^^:
for i in *.mpg; do mkdir `echo $i | awk -F " - " '{print $1}'`; done
et là le drame: je me retrouve avec les repertoires suivants :
anniversaire
bidule
de
ile
la
reunion
Donc je resume ma requete : si une ame charitable pouvait m'indiquer comment creer ces dossiers et deplacer les "bons" fichiers a l'interieur ce serait plus que genereux ^^
Merci et ++
Message édité par soniclemolasson le 18-04-2006 à 19:31:07
---------------
"The soul of a Mac is in its OS not in its processor"