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 :

Manipulation d'après date de fichier


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
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Par défaut Manipulation d'après date de fichier
    Bonjour,

    Existe-t-il un moyen simple de supprimer tous les fichiers textes d'un répertoire, en gardant le plus récent ?

    Merci à tous...

  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
    oui
    en deux lignes de commandes de structure for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /tmp>mkdir fp
    /tmp>cd fp
    /tmp/fp>echo titu > TOTO
    /tmp/fp>echo titu > TITI
    /tmp/fp>echo titu > TATA
    /tmp/fp>echo titu > TUTU
    /tmp/fp>#ca c'est juste pour avoir des fichiers exemple à traiter
    /tmp/fp>for i in * ; do [ $(file $i | grep -i ascii | wc -l ) -eq 1 ] && echo $i >> /tmp/liste_a_effacer ; done 
    /tmp/fp>for i in $(sed '$d' /tmp/liste_a_effacer) ; do rm $i ; done ; rm /tmp/liste_a_effacer
    /tmp/fp>ls
    TUTU
    /tmp/fp>cd .. && rm -rf fp
    je te laisses chercher pour optimiser et faire ça en une si c'est possible...

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Tu peux tenter d'utiliser l'option -mtime de la commande find mais c'est assez mer...ique car il faut connaître depuis combien de temps les fichiers ont été modifiés.

    EDIT : j'ai trouvé en une commande find (testé sous Solaris) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f ! -name "`ls -tr | tail -1`" -exec rm {} \;
    Pour travailler uniquement sur le répertoire local (i.e. éviter que find fasse une recherche récursive) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . \( ! -name . -prune \) -type f ! -name "`ls -tr | tail -1`" -exec rm {} \;

  4. #4
    Membre éclairé
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Par défaut
    Merci Mac,

    Par contre, dans le 2e exemple, que signifient:
    "-prune"
    Le "!" juste après "-type f"
    et le "-exec" ?

    Merci bcp...

  5. #5
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    man find

    -prune c'est pour ne pas tenir compte de ce qui précente. En l'occurence, ce qui précède se trouve dans la parenthèse et signifie "tout ce qui ne s'appelle pas .".
    Le ! vient en négation de -name, donc "! -name ..." signifie "tout ce qui ne s'appelle pas comme indiqué" (c'est idem que dans la parenthèse pour le -prune). Le `ls -tr | tail -1` renvoie le dernier fichier modifié du répertoire, donc au final, la séquence ! -name "`ls -tr | tail -1`" signifie "tout ce qui ne s'appelle pas comme le dernier fichier modifié du répertoire".
    Enfin, le -exec c'est la commande à exécuter pour chaque fichier (-type f) trouvé par la commande find en tenant compte de toutes les règles précédentes. {} remplace le nom du fichier trouvé.

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 129
    Par défaut
    -prune ca permet de faire une recherche recursives avec les sous repertoires
    -type f : On cherche des fichiers

    -name "*.txt" : uniquement les fichiers dont le nom correspond au forma *.txt

    le signe d'exclamation signifie "not" ; exemple pour eviter les fichiers "*.so"
    il faut ajouter ! -name "*.so"

Discussions similaires

  1. [10g] Comment supprimer des données déjà ajoutées après la date du fichier de l'export?
    Par Limpasse Creative dans le forum Import/Export
    Réponses: 2
    Dernier message: 17/08/2013, 23h04
  2. Date de fichier incorrecte après écriture
    Par Manic dans le forum Langage
    Réponses: 1
    Dernier message: 23/06/2008, 10h12
  3. [Dates] manipulation de champ date
    Par PAYASS59 dans le forum Langage
    Réponses: 9
    Dernier message: 23/02/2006, 11h13
  4. [MFC] recupération date modif fichier
    Par Gothico dans le forum MFC
    Réponses: 7
    Dernier message: 21/01/2005, 18h47
  5. fonction c pour manipuler la structure date
    Par thomas_b dans le forum Windows
    Réponses: 4
    Dernier message: 28/07/2004, 16h28

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