Rm tous sauf le dernier et alias

Bonjour,
j’ai un dossier avec plusieurs fichiers .log dedans.
J’aimerais avoir une commande qui permet de les supprimer tous, mise à part le dernier.

J’aimerais aussi faire un alias d’une commande.
Exemple au lieu de taper “aptitude update” je voudrais faire “up”.

Pour schématiser ton besoin, je t’invite à nous faire un ls du dossier.
Cela sera plus parlant et tu auras des suggestions plus précises.

Si ton dossier contient les fichiers suivants :
toto.log.1.gz
toto.log.2.gz
toto.log

Dans ce cas la commande suivante peut convenir :
rm toto.log.*.gz

Les logs sont numéroter de cet manière:
L1004062.log
L1004063.log
L1004064.log
L1004065.log
L1004066.log
L1004067.log
L1004068.log

Bonjour,

Voici mon p’tit code :

MES_FICHIERS=$(\ls -1rt <ton_répertoire> | awk '{print LIGNE ; LIGNE=$0}')
rm ${MES_FICHIERS}

Le ‘awk’ affiche toutes les lignes sauf la dernière puisque le ‘print’ est avant la déclaration de la variable 'LIGNE’
Le ‘ls -1rt’ est là pour n’afficher, en ordre chronologique du plus vieux au plus récent, les fichiers et les répertoires sur une seule colonne.

Attention aux fichiers qui contiennent des espaces, ton ‘rm’ ne va pas les trouver car chaque mot de ton fichier sera pris pour un nom de fichier différent !

LeDub en mode codeur !!!

Perso j’aurais tendance, comme LeDub, à les trier par date et ne conserver que le premier de la liste retournée par ls (le plus récent) :

cd /chemin/vers/logs/ ls -t1 ./L*.log | tail -n +2 | xargs rm

Sinon pour faire la même chose en les triant par nom et en ne conservant que le dernier de la liste retournée par ls (le dernier dans l’ordre alphabétique) :

cd /chemin/vers/logs/ ls -1 ./L*.log | head -n -1 | xargs rm

Même remarque concernant les noms de fichiers avec des espaces, mais apparemment ça ne te concerne pas.

Bon après c’est une différence de goûts, je préfère utiliser dans la mesure du possible des outils simples comme tail et head qui font très bien leur boulot et dont le comportement est beaucoup plus facilement compréhensible (pour moi en tous cas)… :wink:

Concernant les alias, si ton shell est bash (pour le reste je ne sais pas) il faut rajouter quelque chose de ce genre dans le .bashrc de l’utilisateur concerné :

Bonjour,

Ma petite contribution pour supprimer tout sauf le dernier :ls |sed '$d' |xargs rm

Merci à vous, tous est résolu.