Merger 2 fichiers / script sh

Résolu/Fermé
snow_frog Messages postés 216 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 juin 2020 - 9 oct. 2013 à 09:59
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 9 oct. 2013 à 11:05
Bonjour,

voilà mon problème: un petit script sh qui demande à l'utilisateur (par le biais de zenity) sur quels fichiers je veux lancer un traitement / recuperation d'image


#!/bin/sh

find * -type d > tmp1

LIST_REP='sed -e 's/.*/"" &/' tmp1'

zenity --list --title "selection" --text "repertoire contenant les images" --checklist --column "selection" --column "repertoire" $LIST_REP > repertoire

SELECT='sed -e 's/|/\n/g' repertoire'

for i in $SELECT
do
find $i/*.png -printf "%f\n" > tmp3
LIST_PNG='sed -e 's/.*/"" &/' tmp3'
zenity --list --title "selection" --text "selection image a traiter" --checklist --column "selection" --column "images" $LIST_PNG >> image

done


...voilà où j'en suis.

mon problème est que je me retrouve avec un fichier "repertoire" contenant ma selection de repertoire et u fichier "image" conteant ma selection d'image

là où je bugue, c'est pour lier les 2 ensemble afin d'avoir le repertoire associé aux images

 frog> cat repertoire
2013_09_25|2013_09_26
frog> cat image
img_20130925_12h00.png|img_20130925_14h00.png|img_20130925_16h00.png
img_20130926_11h00.png|img_20130926_16h00.png
frog>


je voudrais obtenir à partir de ces deux fichiers ça:


frog> cat chemin
2013_09_25/img_20130925_12h00.png
2013_09_25/img_20130925_14h00.png
2013_09_25/img_20130925_16h00.png
2013_09_26/img_20130926_11h00.png
2013_09_26/img_20130926_16h00.png
frog>


j'ai bien trouvé la commande paste, mais...
frog> paste -d '/' repertoire image > chemin 
frog> cat chemin
2013_09_25/img_20130925_12h00.png|img_20130925_14h00.png|img_20130925_16h00.png
2013_09_26/img_20130926_11h00.png|img_20130926_16h00.png

ça copie bien comme il faut, mais il faudrait une ligne par image avec son chemin

avez-vous une idée pour obtenir ça ?
et merci d'avoir lu jusqu'au bout :)
d'avance merci à la communauté
A voir également:

4 réponses

mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
9 oct. 2013 à 10:19
Ça m'a l'air très compliqué, supposons que 2013_09_25 et 2013_09_26 soit dans le même répertoire (mettons /home/toto/photos), il suffit de faire un
find /home/toto
pour avoir le résultat souhaité.

Sinon, le plus simple c'est d'utiliser et à chaque ligne rencontrée, en utilisant le séparateur de colonne "|" extraire le 1er élement (le répertoire) et itérer sur les éléments suivants pour les concaténer avec celui-ci. Le script serait écrit non pas en shell mais en awk, qui est plus adapté pour ce que tu veux faire.

Bonne chance
0
snow_frog Messages postés 216 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 juin 2020 139
Modifié par snow_frog le 9/10/2013 à 10:41
merci de ta réponse,

même si je ne suis pas sûr d'avoir tout compris

première étape, "j'éclate" mon fichier "repertoire" --> un repertoire par ligne
 sed -e 's/|/\n/g' repertoire > repertoire_ligne
frog> cat repertoire
2013_09_25|2013_09_26
frog> cat repertoire_ligne
2013_09_25
2013_09_26



ensuite il faudrait que l'imprime la ligne 1 du fichier repertoire_ligne, avec chaque champ de la ligne 1 du fichier image
==> c'est ça que je ne vois pas comment faire.

sinon, j'ai trouvé un contournement (qui ne me plait pas trop, mais bon si je n'ai pas le choix je le garderai...:
dans la selectio ndes fichiers sous zenity, au lieu d'afficher que le nom de fichier j'affiche le chemin

avant:
find $i/*.png -printf "%f\n" > tmp3


contournement:
find $i/*.png -printf "%h/%f\n" > tmp3
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
9 oct. 2013 à 10:43
Salut,

find $i/*.png -printf "%f\n" > tmp3

Pourquoi supprimes-tu le chemin là, puisque tu t'évertues à vouloir le remettre ensuite ?
0
snow_frog Messages postés 216 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 juin 2020 139
Modifié par snow_frog le 9/10/2013 à 10:49
Salut,

je le supprime pour ne pas qu'il apparaise dans la boite de dialogue de selection de fichier pour plus de lisiblité à l'écran

j'ai essayé sous zenity de "l'afficher" mais de cacher la colonne correspondante, mais du coup il n'est pas dans la sortie zenity...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
9 oct. 2013 à 11:05
A ce moment là, mieux vaut récupérer la liste avec les chemins complets dans un fichier, construire un second fichier pour l'affichage dans zenity (avec numéro) et en fonction du numéro choisi (et non pas du nom) afficher le numéro de ligne correspondant...

Le fichier avec chemin+nom :
$ cat chemin 
2013_09_25/img_20130925_12h00.png
2013_09_25/img_20130925_14h00.png
2013_09_25/img_20130925_16h00.png
2013_09_26/img_20130926_11h00.png
2013_09_26/img_20130926_16h00.png

Le fichier à construire avec numéro+nom :
$ nl < <(sed 's#.*/##' chemin)
1 img_20130925_12h00.png
2 img_20130925_14h00.png
3 img_20130925_16h00.png
4 img_20130926_11h00.png
5 img_20130926_16h00.png

La ligne a récupéré en fonction de son numéro :
$ sed -n 2p chemin 
2013_09_25/img_20130925_14h00.png
0