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...
Version imprimable
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...
oui
en deux lignes de commandes de structure for:
je te laisses chercher pour optimiser et faire ça en une si c'est possible...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
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) :
Pour travailler uniquement sur le répertoire local (i.e. éviter que find fasse une recherche récursive) :Code:find . -type f ! -name "`ls -tr | tail -1`" -exec rm {} \;
Code:find . \( ! -name . -prune \) -type f ! -name "`ls -tr | tail -1`" -exec rm {} \;
Merci Mac,
Par contre, dans le 2e exemple, que signifient:
"-prune"
Le "!" juste après "-type f"
et le "-exec" ?
Merci bcp...
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é.
-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"