Merger 2 fichiers / script sh

Résolu
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é

4 réponses

  1. Modérateur
    Ç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
    1. 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
      1. Contributeur
        Salut,

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

        Pourquoi supprimes-tu le chemin là, puisque tu t'évertues à vouloir le remettre ensuite ?
        0
        1. 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
          1. Contributeur
            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