Lister en parallèle

Lister en parallèle - Shell/Batch - Programmation

Marsh Posté le 09-01-2008 à 18:40:35    

Bonjour,
 
Voilà mon soucis, j'ai une liste de noms dans un fichier texte et un repertoire avec des fichiers.
Comment modifier le nom du 1er fichier du repertoire en le remplaçant par le 1er nom de la liste se trouvant dans le fichier texte.
Est-ce qu'il faut obligatoirement passer par un tableau afin de stocker les nom ou est-il possible de parcourir les 2 listes, listes des fichiers du repertoire et liste des noms, en parallèle?
 
Merci

Reply

Marsh Posté le 09-01-2008 à 18:40:35   

Reply

Marsh Posté le 09-01-2008 à 20:48:24    

Sous quel système d'exploitation ?

Reply

Marsh Posté le 10-01-2008 à 15:16:03    

Linux, en Shell
Pour l'instant pour faire correspondre les lignes j'ai mis un numéro en index de chaque nom et pour chaque ligne de ma 1ere liste je recherche la ligne correspondante dans la seconde liste en fonction du numero

Reply

Marsh Posté le 10-01-2008 à 15:29:01    

Utilise join pour rassembler les deux fichiers en un seul, puis parcours ce fichier pour faire un mv.

Reply

Marsh Posté le 10-01-2008 à 17:27:17    


    # fichier1.txt sert d'entrée au file descriptor 3 du shell courant  
    exec 3< fichier1.txt  
 
    # fichier2.txt sert d'entrée au file descriptor 4 du shell courant  
    exec 4< fichier1.txt  
 
    read <&3   # consomme une ligne de fichier1.txt  
    read <&3   # consomme la ligne suivante  
    while read ligne; do  
       blabla  
       read<&4 # consomme une ligne de fichier2.txt  
       blabla  
    done <&3   # consomme le reste


 
 
une possibilité parmi tant d'autre pour lire ligne par ligne 2 fichiers :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 10-01-2008 à 18:37:11    

Lorsque j'essaie d'afficher avec
 
while read ligne; do    
  read <&4;
  echo $ligne;
 done
 
celà ne fonctionne pas!

Reply

Marsh Posté le 11-01-2008 à 01:57:12    

Si j'ai bien compris :
- il y a un fichier texte qui contient une liste de nom (une ligne par nom)
- il y a un répertoire qui contient un certain nombre de fichier
- il faut renomer les fichiers du répertoire (triés par ordre alphabetique) par le nom correspondant dans le fichier
 
Si c'est le cas, je verrais bien qqch du stype (attention pas testé)
 

Code :
  1. pos=1
  2. #boucle sur les fichier du repértoire courant
  3. for ficher_to_rename in `ls $REP`; do
  4.      # récupère la ligne ${pos} en supprimant les autres
  5.      nouveau_nom=`sed -e '${pos}! d'<$filename`
  6.      echo "Renomage de $ficher_to_rename en $nouveau_nom'
  7.      mv  $ficher_to_rename $REP/$nouveau_nom
  8.      ((pos+=1))
  9. done


 
A essayer

Reply

Marsh Posté le 11-01-2008 à 23:10:22    

Une solution :
 


for i in *; do
    read new_name
    echo mv "$i" "$new_name"
done < fichier



---------------
[:arsunik]  Les tournois de badminton
Reply

Marsh Posté le 12-01-2008 à 10:50:48    

Merci ArSunik ca fonctionne.
Pour chaque iteration cela prend une ligne du for et une ligne de fichier et les lignes suivantes pour les iterations suivantes. J'etais loin de penser à la ligne done < fichier

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed