Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/01/2008, 16h27   #1
Membre actif
 
Inscription : août 2005
Messages : 562
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 562
Points : 177
Points : 177
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...
byloute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 07h52   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 546
Points : 7 779
Points : 7 779
oui
en deux lignes de commandes de structure for:
Code :
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...
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 09h43   #3
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 310
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 310
Points : 8 592
Points : 8 592
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 :
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 :
find . \( ! -name . -prune \) -type f ! -name "`ls -tr | tail -1`" -exec rm {} \;
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 16h13   #4
Membre actif
 
Inscription : août 2005
Messages : 562
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 562
Points : 177
Points : 177
Merci Mac,

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

Merci bcp...
byloute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 17h38   #5
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 310
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 310
Points : 8 592
Points : 8 592
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é.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 17h42   #6
Membre habitué
 
Inscription : novembre 2007
Messages : 130
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 130
Points : 134
Points : 134
-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"
azalsup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h02.


 
 
 
 
Partenaires

Hébergement Web