Aujourd'hui, nous allons vous montrer un moyen par lequel vous pouvez supprimer les fichiers datant de plus de « X jours ». Supposons que vous souhaitiez supprimer des fichiers de plus de 7 jours, cet article vous aidera à le faire. L'utilitaire find vous permet de passer quelques arguments intéressants, dont un pour exécuter une autre commande sur chaque fichier. Afin de déterminer quels fichiers sont plus anciens qu'un certain nombre de jours, nous utiliserons ceci trouver l'utilité puis utilisez le commande rm pour les supprimer. La syntaxe de la commande est la suivante :
trouver /chemin/vers/fichiers* -mtime +5 -exec rm {} \;
Nous ne sommes pas responsables des pertes de données qui pourraient survenir. Nous vous avons recommandé au lister les fichiers et vérifier avant de les supprimer, en exécutant la commande suivante :
trouver /chemin/vers/fichiers* -mtime +5 -exec ls {} \;
Remarque: Il y a des espaces entre rm, {} et \;
Explication de la commande :
Le premier argument de la commande ci-dessus est le chemin d'accès aux fichiers. Le deuxième argument est -Mtime est utilisé pour spécifier combien de jours le fichier est vieux. Si vous entrez +5, il trouvera les fichiers de plus de cinq jours. Le dernier argument est Exec- vous permet de passer une commande telle que rm. Les {} \ ; à la fin est nécessaire pour terminer la commande.
Cela devrait fonctionner sur presque toutes les versions de Linux comme Ubuntu, Fedora, Red Hat, Suse, etc. Si vous rencontrez un problème qui semble tout à fait impossible ici, faites-le nous savoir dans les commentaires ci-dessous.
Sourate Salunkhe
J'ai utilisé cette astuce ! Astuce géniale! Merci d'avoir partagé une si bonne astuce :)
Amruta Patil
Ya j'ai utilisé cette cammand pendant la session pratique de RHCE.
Ben
find ./* -mtime +5 -exec ls {} \; >> ./5DaysOld
alias 5DayLs="find ./* -mtime +5 -exec ls {} \; >> ./5DaysOld"
Vous avez préparé quelque chose à partir de votre suggestion ici. Une méthode pour faire une liste de fichiers en texte brut de fichiers vieux de cinq jours. Il est plus facile de conserver un enregistrement pour la visualisation avant de supprimer des fichiers. Les utilisateurs peuvent ensuite utiliser cat, vi, vim, gedit, emacs pour voir ce qu'ils peuvent jeter.
find ./* -mtime +5 -exec ls {} \; >> ./5DaysOld
Le décomposer ./ est le répertoire actuel. Trouvez en utilisant un répertoire courant souvent plus sûr qu'en utilisant le / cannon. >> ajoute à un fichier, s'il n'existe pas, il est créé.
Même pensé que cela peut être utile comme alias. Peut/devrait probablement le porter d'abord sur un script shell. Être paresseux cependant, tard ici.
Ben Piper
Merci! J'ai utilisé cette syntaxe dans une tâche cron.
Vivian
La bonne astuce pour supprimer les fichiers plus anciens que certains jours. Cependant, si votre liste d'arguments est longue (je pense que le maximum est de 65535 ou quelque chose du genre), cela ne fonctionnera pas.
J'ai un script personnalisé qui fait le travail :
#!/bin/bash
cd /directory-to-be-checked
allfiles=`ls`
NOW=`date +%s`
for filename in $allfiles
do
OLD=`stat -c %Z $filename`
if [ "$2" == "" ]
then
DELAY=86400
else
let "DELAY=$2 * 86400"
fi
AGE=`expr $NOW - $OLD`
#echo "Delay is $DELAY and Age is $AGE"
#exit 0
if [ $AGE -gt $DELAY ]
then
#echo "File $filename is $AGE"
fstamp=`ls -l $filename`
if [ "$1" == "DEL" ]
then
echo "Deleting file $filename"
`rm -f $filename`
else
echo "$fstamp"
fi
fi
Terminé.
Rajesh Namase
Merci d'avoir donné le script.
Vivian
Votre bienvenue Namase.
Appelez le script comme ceci :
./scriptname.sh DEL numDays
Si numDays n'est pas spécifié, il utilisera le minimum de 1 alors assurez-vous de spécifier numDays. Je ne suis pas responsable de la façon dont vous utilisez ce script et de toute perte de données pouvant survenir.
Pawan
si je veux supprimer les répertoires et les fichiers de 30 jours sur ma machine distante et une chose à l'exclusion des répertoires 1 et 2 ou 3 et comment puis-je faire cela .. ?? S'il vous plaît partager vos pensées.
Ali
J'utilise cette technique c'est très utile pour supprimer le fichier trc dans oracle
Ethan
Merci de partager cette commande utile pour tous les utilisateurs. Nous pouvons facilement supprimer les anciens fichiers sous Linux. Je le cherche aussi et j'ai enfin la solution ici.
Greg
Cela permet-il également d'obtenir des fichiers dans des sous-répertoires ? Si oui, comment ferais-je pour que ce ne soit pas le cas ?
trouver /home/greg/logs -type f -mtime +5 -exec rm {} ;
Sourate Salunkhe
Je cherchais une telle commande. Très utile. Et merci pour le partage du script, Vivian.
Suresh Musale
Chère équipe,
Je dois supprimer les répertoires datant de 14 jours et les répertoires doivent être supprimés s'ils ne contiennent que des chiffres.
Par exemple :
Le nom du répertoire 20180424 doit être supprimé
Le nom du répertoire 20180424backup doit être supprimé
En fait, la commande Find avec regex et mtime ne fonctionne pas.
trouver l'expression régulière du chemin mtime -14 | xargs rm -rf {}\;
ne fonctionne pas