Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Je cherche à organiser toutes mes photos dispersées sur mon serveur dédié
Envoyé par: lulu62

Bonjour,

Je suis plutôt novice dans le monde linux et en ce moment je me familiarise avec les commandes shell.

Sur mon serveur dédié j'heberge qq sites web avec à l'intérieur de ceux-ci de nombreuses photos au format jpg.
j'ai récemment installé le logiciel de gestion de photo en ligne "Gallery", et maintenant je cherche à centraliser toutes les photos se trouvant dans les différents sites web vers le repertoire data de Gallery

Le problème c'est que les photos sont dispersés partout.

Je cherche donc une commande shell qui me permettrait de trouver les photos et ensuite les copier vers le repertoire data de Gallery.

J'ai trouvé cette commande :

find /directory/ -iname *.JPG -exec cp "{}" /another_directory/ \;

Cela fonctionne bien : je copie toutes les photos .jpg ou .JPG dispersées dans les sous-répertoires de /directory/ vers /another_directory/

Cependant je me retrouve avec toutes les photos mélangées dans "another_directory".

Je souhaiterais donc au moins garder le nom du dernier sous-répertoire dans lequel se trouve les photos afin que je sache à quoi correspondent ces photos, je ne sais pas si c'est faisable surtout le fait de garder uniquement le dernier sous-repertoire.

J'espère que vous avez compris mon problème et que vous pouvez m'aider à le résoudre, merci d'avance !

Poste le Monday 9 April 2007 11:44:50
Répondre     Citer    
Re: Je cherche à organiser toutes mes photos dispersées sur mon serveur dédié
Envoyé par: Sve@r

Citation
lulu62
Bonjour,

Je suis plutôt novice dans le monde linux et en ce
moment je me familiarise avec les commandes
shell.

Sur mon serveur dédié j'heberge qq sites web avec
à l'intérieur de ceux-ci de nombreuses photos au
format jpg.
j'ai récemment installé le logiciel de gestion de
photo en ligne "Gallery", et maintenant je cherche
à centraliser toutes les photos se trouvant dans
les différents sites web vers le repertoire data
de Gallery

Le problème c'est que les photos sont dispersés
partout.

Je cherche donc une commande shell qui me
permettrait de trouver les photos et ensuite les
copier vers le repertoire data de Gallery.

J'ai trouvé cette commande :

find /directory/ -iname *.JPG -exec cp "{}"
/another_directory/ \;

Cela fonctionne bien : je copie toutes les photos
.jpg ou .JPG dispersées dans les sous-répertoires
de /directory/ vers /another_directory/

Cependant je me retrouve avec toutes les photos
mélangées dans "another_directory".

Je souhaiterais donc au moins garder le nom du
dernier sous-répertoire dans lequel se trouve les
photos afin que je sache à quoi correspondent ces
photos, je ne sais pas si c'est faisable surtout
le fait de garder uniquement le dernier
sous-repertoire.

J'espère que vous avez compris mon problème et que
vous pouvez m'aider à le résoudre, merci d'avance
!

Bien sûr, je comprends ton idée. c'est faisable mais faut avoir une certaine habitude de la programmation de scripts.
Le pb de "find" est qu'il ne travaille que sur le fichier final et oblitère totalement le répertoire parent.

Bon, je vais essayer de faire un truc "en live", sans tester, au fur et à mesure que ça me vient

#!/bin/sh

# Lecture de chaque fichiers issus du find
find /directory/ -iname *.JPG  |while read fic
do
    # Donc ici, la variable "fic" contient un nom complet
    # On va la couper sur le "/"
    old="$IFS"
    IFS="/"
    set $fic
    IFS="$old"

    # Maintenant "$#" contient la profondeur du chemin => 2 cas possibles
    # - $# = 1 parce qu'il n'y a pas d'arborescence
    # - $# >= 2 parce qu'il y a une arborescence d'au-moins 1 répertoire
    case $# in
       1) # on n'a qu'un nom de fichier
          # On crée le nom final
          dir="/another_directory"
          dest="$dir/$1"
          ;;
       2) # On a un répertoire et un fichier
          # On crée le nom final
          dir="/another_directory/$1"
          dest="$dir/$2"
          ;;
       *) # On a une arborescence plus longue
          # On supprime tout ce qu'il y a avant les deux derniers noms
          shift `expr $# - 2`
     
          # On crée le nom final
          dir="/another_directory/$1"
          dest="$dir/$2"
    esac

    # On crée le répertoire de destination s'il n'existe pas
    test ! -d "$dir" && mkdir -p "$dir"

    # On affiche la copie qu'on va faire
    echo "cp $file $dest"

    # on fait la copie
    cp "$file" "$dest"
done

Bon, j'ai pas testé ce truc mais ça me semble correct. On peut faire probablement plus court et plus "élégant" mais là, j'ai pas trop le temps. Essaye de bien comprendre l'idée du script et rappelle toi qu'en script, quand un outil te manque c'est très facile de le créer.

Tu peux télécharger mon cours de shell ici: [fr.lang.free.fr]


L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Wednesday 11 April 2007 15:45:23
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Je cherche à organiser toutes mes photos dispersées sur mon serveur dédié
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons