Merger 2 fichiers / script sh
Résolu
                    
        
     
             
                    snow_frog
    
        
    
                    Messages postés
            
                
     
             
            220
        
            
                                    Statut
            Membre
                    
                -
                                     
zipe31 Messages postés 38797 Statut Contributeur -
        zipe31 Messages postés 38797 Statut Contributeur -
        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
...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
je voudrais obtenir à partir de ces deux fichiers ça:
j'ai bien trouvé la commande paste, mais...
ç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é
                
            
                
    
    
    
        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:         
- Merger 2 fichiers / script sh
 - Supercopier 2 - Télécharger - Gestion de fichiers
 - Script vidéo youtube - Guide
 - Renommer des fichiers en masse - Guide
 - Fichiers epub - Guide
 - Wetransfer gratuit fichiers lourd - Guide
 
4 réponses
                        
                    Ç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 
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
    
                find /home/totopour 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
                        
                    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
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:
contournement:
    
                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
                        
                    Salut,
Pourquoi supprimes-tu le chemin là, puisque tu t'évertues à vouloir le remettre ensuite ?
                
                
    
                find $i/*.png -printf "%f\n" > tmp3
Pourquoi supprimes-tu le chemin là, puisque tu t'évertues à vouloir le remettre ensuite ?
                        
                    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...
    
                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...
    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 :
Le fichier à construire avec numéro+nom :
La ligne a récupéré en fonction de son numéro :
    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