IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script pour ranger automatiquement textures


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 8
    Par défaut Script pour ranger automatiquement textures
    Bonjour à toutes et à tous,

    J'ai quelques milliers de textures à ranger et j'aimerais faire un script afin de ne pas passer plusieurs jours à tout faire manuellement.
    Concrètement, j'ai un dossier, dans lequel toutes mes textures se trouvent (au format jpg png ou tiff).

    Elles sont toutes déjà nommées correctement, par exemple :

    NomDeLaTexture_TYPE_VARIATIONSILYENA_DEFINITION.extension

    Un petit screen pour illustrer le tout :


    Mon but est de les ranger tous de cette manière :

    NomDeLaTexture/DEFINITION/NomDeLaTexture_TYPE_VARIATIONSILYENA_DEFINITION.extension


    Pour le moment j'ai écrit ce bout de code, qui est sensé déplacer les textures dans le dossier de définition (après avoir déplacer les textures dans le dossier portant leur nom), j'espérais ne créer les dossier 1K, 3K,... seulement si des textures de cette définition étaient trouvé, or, même si elle ne sont pas présentent, les dossier sont créé. J'apprends un peu sur le tas du coup je suppose que je n'ai pas dût bien comprendre comment fonctionner les condition sous linux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #!/bin/sh
     
    if find . -name "*512kb.*";
    then
    	mkdir 1K
    	mv $(find *_512kb*) 512kb/
    else
    fi
     
    if find . -name "*1K.*";
    then
    	mkdir 1K
    	mv $(find *_1K*) 1K/
    else
    fi
     
    if find . -name "*3K.*";
    then
    	mkdir 3K
    	mv $(find *_3K*) 3K/
    else
    fi
     
    if find . -name "*6K.*";
    then
    	mkdir 6K
    	mv $(find *_6K*) 6K/
    else
    fi
     
    if find . -name "*HIRES.*";
    then
    	mkdir HIRES
    	mv $(find *_HIRES*) HIRES/
    else
    fi
     
    exit
    Sinon je n'ai pas du tout trouvé comment déplacer dans un dossier portant le nom de la texture, ni même comment rentrer des commandes dans chaque sous dossier.

    Je suis après sensé créer des miniatures de chaque textures puis tout archiver mais ça je peux le faire à la main de manière plus ou moins rapide donc c'est pas dramatique, et je préfère me concentrer juste pour le tri de base des textures déjà que tout ce que je dis est sûrement un peu confus.

    En espérant recevoir de l'aide de votre part, je vous salue !

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Bonjour,

    c'est pas compliqué, quand on sait le faire

    • boucler/itérer sur les fichiers du répertoire
    • séparer les composantes du nom du fichier : chemin, texture, type, variation, définition, extension
    • utiliser ces composantes pour
      • créer le répertoire de destination
      • déplacer/copier le fichier
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    à en croire ton script il faut prendre en compte les variations 512kb, 1K, 3K, 6K et HIRES, on peut alors faire une simple boucle comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for variation in 512kb 1K 3K 6K HIRES; do
       find . -maxdepth 1 -type f -name "*_${variation}*" -exec mv {} ${variation}/ \;
    done
    l'option -maxdepth 1 sert à prévenir find de ne pas descendre dans les sous-répertoires, dans le cas où tous les fichiers sont dans le même répertoire et que les répertoires "variations" sont juste à côté typiquement

    les différentes variations doivent obligatoirement être connues et listées à la main (VARIATIONSILYENA), les fichiers dont le nom ne matchent aucune variation particulière restent alors dans le répertoire courant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ ls -p
    1K/      RoofShinglesOO1_COL_VAR1_HIRES.jpg  RoofShinglesOO1_REFL_1K.jpg      Roofshinglesoo3_GLoss_1K.jpg    RoofShinglesOO4_COL_VAR1_3K.jpg
    3K/      RoofShinglesOO1_COL_VAR2_1K.jpg     RoofShinglesOO1_REFL_3K.jpg      Roofshinglesoo3_GLoss_3K.jpg    RoofShinglesOO4_COL_VAR1_6K.jpg
    512kb/   RoofShinglesOO1_COL_VAR2_3K.jpg     RoofShinglesOO1_REFL_6K.jpg      Roofshinglesoo3_GLoss_6K.jpg    RoofshinglesOO4_COL_VAR1_HIRES.jpg
    6K/      RoofShinglesOO1_COL_VAR2_6K.jpg     RoofShinglesOO1_REFL_HIRES.jpg   RoofShinglesOO3_GLOSS_HIRES.jpg RoofShinglesOO4_COL_VAR2_1K.jpg
    HIRES/   RoofShinglesOO1_COL_VAR2_HIRES.jpg  RoofShinglesOO3_COL_VAR1_1K.jpg  Roofshinglesoo3_NRM_1K.jpg      RoofShinglesOO4_COL_VAR2_3K.jpg
    (...)
     
    $ for variation in 512kb 1K 3K 6K HIRES; do find . -maxdepth 1 -type f -name "*_${variation}*" -exec mv {} ${variation}/ \; ; done
     
    $ ls HIRES/
    RoofShingles001_NRM_HIRES.jpg       RoofShinglesOO1_COL_VAR2_HIRES.jpg  RoofshinglesOO3_COL_VAR1_HIRES.jpg  RoofShinglesOO3_REFL_HIRES.jpg
    RoofShingles003_NRM_HIRES.jpg       RoofShinglesOO1_GLOSS_HIRES.jpg     RoofshinglesOO3_COL_VAR2_HIRES.jpg  RoofshinglesOO4_COL_VAR1_HIRES.jpg
    RoofShinglesOO1_COL_VAR1_HIRES.jpg  RoofShinglesOO1_REFL_HIRES.jpg      RoofShinglesOO3_GLOSS_HIRES.jpg     RoofshinglesOOZ_COL_VAR1_HIRES.jpg

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    à en croire ton script il faut prendre en compte les variations 512kb, 1K, 3K, 6K et HIRES
    mais comment "variabiliser" le processus, c'est-à-dire si on ne connaît pas à l'avance les "définitions" ?
    on boucle sur les fichiers, et cf. mon message précédent.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    mais comment "variabiliser" le processus, c'est-à-dire si on ne connaît pas à l'avance les "définitions" ?
    on boucle sur les fichiers, et cf. mon message précédent.
    ben justement j'en suis pas sûr, vu qu'il parle dans son premier message du format "NomDeLaTexture_TYPE_VARIATIONSILYENA_DEFINITION.extension", ça sous entend que s'il n'y a pas de variation, on risque de récupérer le TYPE ou la DEFINITION à la place, du coup automatiser... c'est peut-être faisable malgré tout, mais je me méfierai un peu des effets de bord je pense

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    s'il n'y a pas de variation, on risque de récupérer le TYPE ou la DEFINITION
    je ne comprends pas.
    la capture d'écran montre un format de noms de fichiers cohérent, auquel il semble possible de se fier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for file in /cheminAbsoluSource/*
       do
          test -f "$file" && {
             nom="${file##*/}"
             IFS='_.' read -a composantes <<<"$nom"
             printf '%s\n' "${composantes[@]}"
             echo "==="
          }
    done
    ...faut voir avec Cuissedemouche...

    Edit :
    ok, j'ai compris. je n'avais effectivement pas vu que parfois il n'y a pas de VARIATION.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modif d'un script pour demarrage automatiquement
    Par krapoulos dans le forum jQuery
    Réponses: 6
    Dernier message: 17/03/2013, 20h12
  2. Script pour entrer automatiquement un login et mdp
    Par boboss76 dans le forum VBScript
    Réponses: 6
    Dernier message: 16/01/2012, 22h07
  3. script pour suppression automatique
    Par bganata dans le forum VBScript
    Réponses: 5
    Dernier message: 01/04/2010, 09h18
  4. petit script pour vote automatiques
    Par intoxxx dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 16/11/2009, 13h43
  5. Réponses: 2
    Dernier message: 02/06/2009, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo