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 d'archivage d'une liste de fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Par défaut script d'archivage d'une liste de fichiers
    Bonjour,

    Je souhaite automatiser l'archivage de fichiers dans un script.
    (par exemple, lister tous mes fichiers de 2008, les déplacer dans un répertoire 2008 pour pouvoir lez zipper)

    Par exemple quand je lance directement : ls -lrt *2008*
    -bash: /bin/ls: Argument list too long

    Je n'arrive pas à affecter cette commande ls à une variable dans mon script, qqchose du style :
    X=ls -lrt *2008*
    mv X ./2008 où X serait ma liste de fichiers...

    Quelqu'un aurait-il une idée svp?

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    tries les par durée de vie au lieu de les trier par nom...ca permet de faire fichier par fichier et de ne pas avoir d'arg list too long...

    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    find /home -type f -mtime +700 -exec tar uvf /dev/rmt0 {} \; 
    find /home -type f -mtime +700 -exec rm-f {} \;
    dans cet exemple j'ajoute tout fichier de + de 700 jours d'age à mon archive. puis je les supprimes du disque...

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nathan29 Voir le message
    Bonjour,

    Je souhaite automatiser l'archivage de fichiers dans un script.
    (par exemple, lister tous mes fichiers de 2008, les déplacer dans un répertoire 2008 pour pouvoir lez zipper)

    Par exemple quand je lance directement : ls -lrt *2008*
    -bash: /bin/ls: Argument list too long
    Salut

    J'ai rarement vu un ls échouer parce qu'il y a trop de fichiers...???
    Toutefois, il y a une différence entre ton besoin exprimé (lister tous les fichiers de 2008) et ton traitement (qui est de lister tous les fichiers ayant 2008 dans leur nom). Ce n'est pas parce qu'ils ont 2008 dans leur nom qu'ils sont forcément de 2008...

    Citation Envoyé par nathan29 Voir le message
    Je n'arrive pas à affecter cette commande ls à une variable dans mon script, qqchose du style :
    X=ls -lrt *2008*
    Faut utiliser les backquottes style var=`commande`Le shell exécute la commande et reclaque tout ce qu'elle affiche à l'endroit des backquottes. Donc dans l'exemple ça le met dans la variable "var"

    Citation Envoyé par nathan29 Voir le message
    mv X ./2008 où X serait ma liste de fichiers...
    Déjà faut pas mettre ls -l car tu auras aussi les attributs des fichiers dans X. Ensuite, ce serait plus juste de mettre mv $X car c'est la norme quand on veut accéder au contenu des variables.

    Maintenant, il faut aussi savoir que le shell est limité et que souvent tu ne peux pas tout faire en une commande magique. C'est pour ça qu'il existe les boucles de traitement de flux.

    Le principe est le suivant: tu envoies le flux dans un | while read line; do...done. Le read se calant sur le <return>, chaque ligne ne contiendra qu'une ligne venue du flux. Et la boucle while traitera toutes les lignes.

    Donc une des possibilités pourrait être de faire
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ls -rt *2008* |while read fic
    do
        mv "$fic" 2008
    done

    Tu peux aussi utiliser le find qui possède tout un tas d'options de recherche plus une option -exec permettant de faire traiter chaque élément trouvé par find par la commande de ton choix
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "*2008*" -type f -exec mv {} 2008 \;
    Ici, chaque fichier (symbolisé par les accolades) sera traité via mv
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Par défaut
    Merci pour vos réponses, je vais essayer de suite...

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/03/2012, 19h50
  2. Réponses: 2
    Dernier message: 29/02/2012, 15h20
  3. Réponses: 2
    Dernier message: 03/07/2006, 20h14
  4. [VB]Récupérer une liste de fichiers
    Par yaya54 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 20/02/2006, 16h03
  5. Réponses: 10
    Dernier message: 30/01/2005, 20h53

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