[SH] Combinaisons fichiers dans un dossier

Résolu/Fermé
ZZ2F3 Messages postés 40 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 30 juin 2009 - 23 juil. 2008 à 18:05
ZZ2F3 Messages postés 40 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 30 juin 2009 - 24 juil. 2008 à 16:08
Bonjour,

J'aurais besoin de savoir comment faire pour réaliser 2 boucles imbriquées sur des fichiers contenus dans un dossier.

En plus clair (lol), j'aimerais en partant d'un dossier 'Essai' contenant Essai1, Essai2, Essai3, Essai4 pouvoir travailler sur les (4*3/2) 6combinaisons possibles {(Essai1,Essai2),(Essai1,Essai3),(Essai1,Essai4),(Essai2,Essai3),(Essai2,Essai4),(Essai3,Essai4)}

Rq : Les combinaisons sont en faites les paires possibles de ce fichiers, je ne prends pas les doublons et la paire (Essai2,Essai3) est identique à la paire (Essai3,Essai2)

Je sais comment réaliser une boucle sur les fichiers contenus dans un dossier [Merci Jipicy ;)] :
for fich in /home/Essai/*; do echo "fichier trouvé dans le répertoire Essai : " $fich; done

Seulement j'aimerais faire une double boucle du genre :

Pour chaque fichier i du dossier Essai Faire
    Pour chaque fichier ">i" du dossier Essai Faire
         Diverses choses =)
    Fait
Fait


J'espère avoir été assez clair et si ce n'est pas le cas n'hésitez pas à me demander des éclaircissements!

Merci par avance de votre précieuse aide!

Bonne fin de journée

R.
A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
23 juil. 2008 à 20:15
Salut,

Je ne sais pas si j'ai bien tout compris, mais voilà un bout de code basé sur un tableau...
[tmpfs]$ tree
.
|-- Essai
|   |-- Essai1
|   |-- Essai2
|   |-- Essai3
|   `-- Essai4
`-- foo.sh

1 directory, 5 files

[tmpfs]$ cat foo.sh
#! /bin/bash

cd Essai
tableau=( $(ls *) )
count=${#tableau[@]}

for (( i=0; i<count; i++ ))
do
j=$i
while [ "$j" -lt "$((count-1))" ]
do
echo ${tableau[$i]},${tableau[$((j+1))]}
j=$((j+1))
done
done

[tmpfs]$ ./foo.sh
Essai1,Essai2
Essai1,Essai3
Essai1,Essai4
Essai2,Essai3
Essai2,Essai4
Essai3,Essai4

[tmpfs]$  
;-))
0
ZZ2F3 Messages postés 40 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 30 juin 2009
24 juil. 2008 à 16:08
Merci c'est exactement ce que je cherchais et je ne connaissais pas les conditions d'utilisation!

Petit rajour que j'ai fait si cela peut servir à quelqu'un :
set tableau=`ls $Directory | grep -v '/'`
Cette commande permet de n'avoir que les fichiers contenus dans le dossier.

En tous cas [encore] Merci Jipicy!

Bonne journée

R.
0