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 :

Agir selon la date de création de fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Par défaut Agir selon la date de création de fichier
    Bonjour,

    Je suis TRES débutant en Shell, je dois réaliser un script me permettant de tester tous les fichiers d'un repertoire.
    Le test est de verifier si le fichier date de plus d'un mois, si c'est le cas, on le delete.

    Voila ou j'en suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    find /repertoire/ -type f -iname '*.xls' | while read F; do
            echo `stat -c %y "${F}"`
    done
    Ma première problématique est que je ne sais pas si la date retournée est bien celle de créaion.
    Mon deuxième problème est de savoir comment comparer la date avec celle du mois dernier !

    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    D'après ton besoin, tu n'as besoin que de deux commandes:
    -find
    -rm
    En fait, rm sera appelée par find via son option -execEt pour connaitre toutes les options de find, rien de mieux qu'un bon vieux man find

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Par défaut
    Merci pour ton retour, j'ai lu la doc sur le find.
    Du coup si j'ai tout compris je me suis pris la tête pour rien cela peut-être fait en une seul ligne ?

    En lisant la doc j'ai élaboré ceci qu'en penses-tu ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /repertoire/ -ctime +30 -exec rm {}\

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /repertoire/ -type f -mtime +30 -exec /bin/rm -f {} \;
    mtime ou atime

    De même, 30,31, 28 ou 29 à toi de voir

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Par défaut
    Je préfère utiliser le ctime, car il faut le faire seulement sur la date de creation pas de modification

    Pourquoi avoir /bin avant le rm ?

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 122
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 122
    Par défaut
    Citation Envoyé par inoxis91 Voir le message
    Je préfère utiliser le ctime, car il faut le faire seulement sur la date de creation pas de modification

    Pourquoi avoir /bin avant le rm ?
    ctime n'est pas la date de création !

    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
    /* http://www.linux-faqs.info/general/difference-between-mtime-ctime-and-atime
      Difference between mtime, ctime and atime
     
    ctime is the inode or file change time. 
    The ctime gets updated when the file attributes are changed, 
    like changing the owner, changing the permission or 
    moving the file to an other filesystem but will also be updated when you modify a file.
     
    mtime is the file modification time. 
    The mtime gets updated when you modify a file. Whenever you update content of a file or save a file the mtime gets updated.
    Most of the times ctime and mtime will be the same, unless only the file attributes are updated.
    In that case only the ctime gets updated.
     
    atime is the file access time. 
    The atime gets updated when you open a file but also when a file is used for other operations 
    like grep, sort, cat, head, tail and so on.
    */

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Par défaut
    Ah.... Merci je ne citerais pas le site ou j'ai trouvé cette information :

    -ctime recherche par date de création du fichier.
    Maintenant j'aimerais améliorer la chose.
    Chaque fichier correspond a l'état d'un objet a une date ( date de creation) il peut y avoir plusieurs fichiers pour le meme objet mais a différente date pour le coup. (Chaque fichier a l'ID de l'objet en nom.

    J'aimerais comme tout a l'heure supprimer tous les fichiers de plus de 1 mois sauf le dernier de chaque objet
    EX. un fichier peut avoir plus d'un mois mais vu qu'il est le dernier créé il ne faut pas le supprimer.

    Est-ce faisable a mon niveau ? puis-je avoir des pistes ?

    Merci

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Si tu ne fais pas de -exec, la sortie de find est une liste de fichiers avec 1 fichier par ligne.
    A ta place, je ferais la liste des fichiers à supprimer dont je soustrairais la liste des fichiers à conserver.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /repertoire/ -type f -mtime +30 | grep -v -f <(find -type f blablablabla...) |xargs rm -i
    Le deuxième find sort la liste des fichiers à conserver.

  9. #9
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Citation Envoyé par inoxis91 Voir le message
    -ctime recherche par date de création du fichier.
    Bizarre, chez moi, cela ne fonctionne pas comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ stat foo.bar
      File: ‘foo.bar’
      Size: 16582           Blocks: 20         IO Block: 65536  regular file
    Device: c4d3082bh/3302164523d   Inode: 2814749767531972  Links: 1
    Access: (0755/-rwxr-xr-x)  Uid: (xxx)   Gid: (xxx)
    Access: 2015-01-05 16:32:23.029086600 +0100
    Modify: 2015-01-05 16:32:23.030086700 +0100
    Change: 2015-11-30 15:12:14.531082200 +0100
     Birth: 2015-01-05 16:32:22.556039300 +0100
    $ find . -name foo.bar -ctime -1
    ./foo.bar
    J'ai le man et le find qui ce sont ligués contre moi

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

Discussions similaires

  1. script shell: fonction taille fichier/dossier
    Par guluk21 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 29/05/2008, 18h17
  2. script shell répartition de fichiers en tar
    Par mikadoo dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 19/05/2008, 21h14
  3. Script Shell sur des fichiers et chaînes
    Par chris_wafer dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/01/2008, 21h45
  4. Exécuter un script shell via le fichier .mailrc
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 16/06/2007, 18h42
  5. script shell : lire un fichier et donner pour traitement au script
    Par pc974 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 14/05/2007, 14h38

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