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 :

[KSH] Script pour trier des fichier dans des répertoires par mois


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Par défaut [KSH] Script pour trier des fichier dans des répertoires par mois
    Bonjour à toutes et à tous,

    Sur le serveur Redhat sur lequel je travaille, je dispose d'un répertoire contenant une grande quantité de fichiers (environ 4000) nommés de la sorte

    AAAAAA.BBBBB.CCCCCCCC.Dqqqnnn.D040814.TTTTT

    La partie "D040814" est la date de réception du fichier sur mon serveur, et je compte m'en servir comme élément pour mon script, lequel crée des dossiers de type "201408" (année mois) et doit déplacer les fichiers dans les répertoires correspondants

    Dans mon script ksh, outre les boucles qui permettent de vérifier que je suis bien avec le bon compte applicatif et que mon répertoire existe bien, j'exécute ça (le mkdir est commenté pour mes tests pour l'instant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #création du dossier par mois
    if [ -d "$(date +%Y%m)" ]; then
     echo mkdir $(date +%Y%m)
    #       mkdir $(date +%Y%m)
    fi
     
    pwd
     
     
    LIST="'*$(date +%m%y)*'"
    echo $LIST
     
    echo find . -type f -name "${LIST[@]}"
    find . -type f -name "${LIST[@]}"

    Mon problème, c'est que la commande find ne renvoie rien quand je l'exécute via le script.
    La commande pwd renvoie bien le répertoire où se situent les fichiers correspondant au critère de recherche
    Lorsque j'exécute le résultat de la dernière commande echo ( find . -type f -name '*$(date +%m%y)*' ), j'obtiens bien la liste de fichiers.


    Merci d'avance pour vos lumières.

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

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


    find va chercher des fichiers dont le nom comporte la date indiquée, les fichiers que tu cherches ne comporte pas cette date
    pourquoi utiliser un tableau dans l'appel à find, alors qu'aucun tableau n'est créé ?

    PS: pourquoi KSH ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Par défaut
    Oui, à force d'essayer des variantes ou des exemples approchants sans bien les comprendre, j'ai fini par écrire des commandes pas cohérentes (la liste)

    A tête reposée, j'ai essayé de remettre un peu au propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    requete="'*$(date +%m%y)*'"
    echo $requete
     
    echo find . -type f -name "$requete"
    find . -type f -name "$requete"
    A l'écran, j'affiche bien le contenu de $requete : '*0814*'
    la commande find se construit correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -name '*0814*'
    avant l'exécution de la commande je suis bien positionné dans le répertoire où se trouvent mes fichiers (une commande pwd me le confirme)

    Quand à l'utilisation de ksh, tous les scripts sur ce serveur sont créés ainsi.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    j'observe que sans les guillemets, lors de l'assignation, le finds'exécute correctement.

    Quant à l'utilisation de ksh, tous les scripts sur ce serveur sont créés ainsi.
    c'est un serveur sous GNU/linux ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par MsieurDams Voir le message
    A tête reposée, j'ai essayé de remettre un peu au propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    requete="'*$(date +%m%y)*'"
    echo $requete
     
    echo find . -type f -name "$requete"
    find . -type f -name "$requete"
    A l'écran, j'affiche bien le contenu de $requete : '*0814*'
    la commande find se construit correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -name '*0814*'
    euh... je vais peut-être dire une bêtise, mais il me semble que si tu tapes find . -type f -name "'*0814*'", tu vas chercher tous les fichiers dont le nom commence par un simple quote suivi de n'importe quoi suivi de 0814 suivi de n'importe quoi et suivi d'un simple quote... donc probablement peu de fichiers!

    As-tu essayé de remplacer requete="'*$(date +%m%y)*'" par requete="*$(date +%m%y)*" ?
    car, dans find . -type f -name "$requete", les double guillemets protègent déjà d'une expansion par le shell!

Discussions similaires

  1. Script shell pour renommer des fichiers dans des sous répértoires
    Par ibuto dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/12/2013, 20h52
  2. Récupérer des fichiers dans des repertoires et sous répertoires
    Par philcphilc dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 05/09/2013, 19h37
  3. VBS aide pour compter des valeurs dans des fichiers xml
    Par jorge91450 dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/01/2013, 13h28
  4. Script pour Modifier les metadonnées dans des TIFF
    Par Airmoi dans le forum Windows
    Réponses: 2
    Dernier message: 04/11/2006, 14h12
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37

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