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

  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 347
    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 347
    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 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    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 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    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 347
    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 347
    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

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 62
    Par défaut
    Merci à vous

    La 2éme partie me semble trop compliqué pour le moment, parceque la liste des fichiers a ne pas supprimer je ne la connais pas, elle est en fonction des fichiers présents... Je verrais plus tard lorsque j'aurais plus d'experience !

    Encore merci pour vos lumières.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    la date de création d'un fichier n'est disponible que sur les systèmes de fichiers les plus récents, tels ext4.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    la liste des fichiers a ne pas supprimer je ne la connais pas, elle est en fonction des fichiers présents.
    C'est pas une réponse.
    Tous les fichiers de même groupe n'ont pas le même nom. Donc quel est l'élément concret qui permet de désigner le dernier ? Un horodatage dans le nom ? Une date de modification ?

    la date de création d'un fichier n'est disponible que sur les systèmes de fichiers les plus récents, tels ext4.
    Ahhhh. Je comprends pourquoi aucun de mes fichiers de test n'ont de date de création. Ils doivent venir d'un système ext3. Pourtant mon ordi est récent. J'ai dû me tromper de distribution Ubuntu.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ stat foo.bar
     Birth: 2015-01-05 16:32:22.556039300 +0100
    C'est quoi ce stat qui te remonte une date de "naissance" pour les fichiers ? Jamais vu ça, et l'exemple dans man 2 stat ne le prévoit/propose pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
               printf("Last status change:       %s", ctime(&sb.st_ctime));
               printf("Last file access:         %s", ctime(&sb.st_atime));
               printf("Last file modification:   %s", ctime(&sb.st_mtime));
     
               exit(EXIT_SUCCESS);
    Citation Envoyé par N_BaH Voir le message
    la date de création d'un fichier n'est disponible que sur les systèmes de fichiers les plus récents, tels ext4.
    Je suis en ext4, et j'ai une version 8.3. Résultat sur un fichier créé en fin de journée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Accès : 2015-11-30 18:46:34.965705509 +0100
    Modi. : 2015-11-30 19:12:30.617419569 +0100
    Chgt  : 2015-11-30 19:12:30.617419569 +0100
    Créé  : -

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ lsb_release -d
    Description:    Debian GNU/Linux 8.2 (jessie)
    $ df -T -text4
    Sys. de fichiers Type blocs de 1K Utilisé Disponible Uti% Monté sur
    /dev/sda1        ext4    36728400 6092568   28747064  18% /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ stat /initrd.img
      Fichier*: «*/initrd.img*» -> «*/boot/initrd.img-3.16.0-4-amd64*»
       Taille*: 31          Blocs*: 0          Blocs d'E/S*: 4096   lien symbolique
    Périphérique*: 801h/2049d       Inœud*: 1745        Liens*: 1
    Accès*: (0777/lrwxrwxrwx)  UID*: (    0/    root)   GID*: (    0/    root)
     Accès*: 2015-11-26 14:11:12.190281246 +0100
    Modif.*: 2015-04-30 04:15:39.174471729 +0200
    Changt*: 2015-04-30 04:15:39.174471729 +0200
      Créé*: -
    la date de création d'un fichier n'est disponible que sur les systèmes de fichiers les plus récents, tels ext4.
    Wikipedia confirme.
    Debian infirme.
    ???
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    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
    $ lsb_release -d
    Description:    Ubuntu 14.04.3 LTS
    $ df -T -text4
    Sys. de fichiers Type blocks de 1K  Utilisé Disponible Uti% Monté sur
    /dev/sda6        ext4    103080224 21642168   76178844  23% /
    /dev/sda9        ext4    101828968 94785164    1848080  99% /home
    $ stat /initrd.img
      Fichier*: «/initrd.img» -> «boot/initrd.img-3.13.0-68-generic»
       Taille*: 33          Blocs*: 0          Blocs d'E/S*: 4096   lien symbolique
    Périphérique*: 806h/2054d       Inœud*: 13112       Liens*: 1
    Accès*: (0777/lrwxrwxrwx)  UID*: (    0/    root)   GID*: (    0/    root)
    Accès*: 2015-11-14 20:33:22.830065739 +0100
    Modif.*: 2015-11-14 20:33:06.546065447 +0100
    Changt*: 2015-11-14 20:33:06.546065447 +0100
      Créé*: -

  16. #16
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    Citation Envoyé par Jipété Voir le message
    C'est quoi ce stat qui te remonte une date de "naissance" pour les fichiers ? Jamais vu ça, et l'exemple dans man 2 stat ne le prévoit/propose pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
               printf("Last status change:       %s", ctime(&sb.st_ctime));
               printf("Last file access:         %s", ctime(&sb.st_atime));
               printf("Last file modification:   %s", ctime(&sb.st_mtime));
     
               exit(EXIT_SUCCESS);
    C'est une version cygwin, sur du NTFS
    Et le man 1 stat, sous linux le prévoit:
    %w time of file birth, human-readable; - if unknown

    %W time of file birth, seconds since Epoch; 0 if unknown

  17. #17
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ lsb_release -d
    Description:    Debian GNU/Linux 8.2 (jessie)
    $ df -T -text4
    Sys. de fichiers Type blocs de 1K Utilisé Disponible Uti% Monté sur
    /dev/sda1        ext4    36728400 6092568   28747064  18% /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ stat /initrd.img
      Fichier*: «*/initrd.img*» -> «*/boot/initrd.img-3.16.0-4-amd64*»
       Taille*: 31          Blocs*: 0          Blocs d'E/S*: 4096   lien symbolique
    Périphérique*: 801h/2049d       Inœud*: 1745        Liens*: 1
    Accès*: (0777/lrwxrwxrwx)  UID*: (    0/    root)   GID*: (    0/    root)
     Accès*: 2015-11-26 14:11:12.190281246 +0100
    Modif.*: 2015-04-30 04:15:39.174471729 +0200
    Changt*: 2015-04-30 04:15:39.174471729 +0200
      Créé*: -
    Wikipedia confirme.
    Debian infirme.
    ???
    Alors sous lubuntu, une partie du man de ext4:
    extra_isize
    This ext4 feature reserves a specific amount of space in each inode for extended metadata such as nanosecond timestamps and file
    creation time
    , even if the current kernel does not current need to reserve this much space. Without this feature, the kernel
    will reserve the amount of space for features currently it currently needs, and the rest may be consumed by extended attributes.
    Et le man de tune2fs:
    -O [^]feature[,...]
    Set or clear the indicated filesystem features (options) in the filesystem. More than one filesystem feature can be cleared or set by sepa‐
    rating features with commas. Filesystem features prefixed with a caret character ('^') will be cleared in the filesystem's superblock;
    filesystem features without a prefix character or prefixed with a plus character ('+') will be added to the filesystem. For a detailed
    description of the file system features, please see the man page ext4(5).

    The following filesystem features can be set or cleared using tune2fs:
    ....
    ....
    extra_isize
    Enable the extended inode fields used by ext4.

+ 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