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 :

Copie fichier au dela d'une date


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Par défaut Copie fichier au dela d'une date
    Bonjour.

    Je ne suis pas un pro linux loin de la. Et j'aurais aimé savoir s'il était possible de copier des fichiers vers un dossier par rapport à leur date.

    Exemple:

    J'ai des fichiers qui sont nommés comme ceci :
    2007-11-02_235900.log
    2007-11-04_235901.log
    2007-11-10_235902.log
    2007-11-20_235903.log
    2007-11-22_235904.log

    Et je voudrais pouvoir faire une requête pour copier les fichiers dont la date est supérieur à 10jours dans un dossier s'appelant par exemple test.

    Merci de votre aide car je me noie

    PS: Je me suis peut-être tromper de section, si c'est le cas merci de le déplacer la ou il se doit et je m'en excuse.

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    Voici une réponse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
    cd /repertoire/qui/va/bien
    listeFichier=$(echo *.log)
    for fichier in $listeFichier
    do
        dateFichier=${fichier%_*}
        diffJours=$(( ($(date +%s) - $(date -d $dateFichier +%s)) / 86400 ))
        if [ diffJours -ge 10 ]
        then
            mv fichier test
        fi
    done
    Explications:
    La principale difficulté est de calculer la différence de 10 jours. Pour ce faire, on transforme la date en nombre de secondes depuis Epoch (1er janvier 1970) que l'on retranche à maintenant, aussi en nombre de secondes (ce sont les commandes date +%s). Puis on divise par 86400 pour avoir la différence non plus en secondes mais en jours.

  3. #3
    Membre chevronné Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Par défaut
    Bonjour,

    Ceci devrais convenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name *.log -ctime +10 | xargs -i mv {} /ton/dossier/test/
    La commande find va chercher dans le dossier courant tout les fichiers log dont la date de création est supérieure à 10 jours, puis les déplacera dans le répertoire souhaité.

  4. #4
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    La solution avec find est beaucoup plus élégante et concise que la mienne. Néanmoins, je voudrais apporter deux points:

    • Il est possible de faire le mv directement dans la commande find avec l'option -exec mv {} \;.
    • La commande find est récursive, donc tous les sous-répertoires seront passés au crible (dont peut-être le répertoire de destination!). Pour éviter cela, il faut contraindre find à rester dans le répertoire source par l'option -maxdepth 1.

    On obtient donc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd repertoireSource
    find . -name *.log -maxdepth 1 -ctime +10 -exec mv {} repertoireDest \;
    Attention, il faut être dans le bon répertoire pour que ça marche (d'où le cd repertoireSource avant le find) parce que le shell va déjà chercher la liste des fichiers *.log du répertoire courant et les passer à la commande find. Mais on peut aussi éviter que le shell s'occupe d'interpréter *.log en mettant le critère entre guillemets "*.log". Dans ce cas, la commande peut être lancée de n'importe quel répertoire (Attention aussi à repertoireDest!).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find repertoireSource -name "*.log" -maxdepth 1 -ctime +10 -exec mv {} repertoireDest \;

  5. #5
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Par défaut
    Et bah j'ai encore beaucoup à apprendre sur linux et les commandes.

    Dans tous les cas ça a été testé et ça fonctionne. Merci de votre aide.

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

Discussions similaires

  1. Supprimer des fichiers en fonction d'une date
    Par Sh4dow49 dans le forum Administration système
    Réponses: 1
    Dernier message: 02/06/2009, 22h36
  2. Trouver les fichiers x jours après une date
    Par rd07110 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 19/02/2008, 12h43
  3. suppression fichier en fonction d'une date
    Par kalyparker dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 02/07/2007, 14h19
  4. Boucle en Dos pour lister des fichiers selon une date
    Par Corben dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 17/12/2005, 12h17
  5. Supprimer un fichier par rapport a une date
    Par NewB dans le forum Linux
    Réponses: 2
    Dernier message: 25/06/2003, 13h44

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