GNU/Linux >> Tutoriels Linux >  >> Linux

Quel est le problème avec mon script bash pour conserver les x derniers fichiers et supprimer le reste ?

Vous pouvez essayer celui-ci :

ls -r1 $PT_MYSQLBACKUPPATH/ | tail -n +$(($PT_FILESTOKEEP+1)) | xargs rm

ls -r1 listera tous les fichiers dans l'ordre inverse, un fichier par ligne.

tail -n +$number filtre les premiers fichiers $numéro-1 de la liste (resp. affiche tous les fichiers à partir de $numéro jusqu'au dernier).

xargs exécutera rm avec tous les noms de fichiers de l'entrée standard.


Tout d'abord, assurez-vous d'être dans le bon dossier :

if [ -z $PT_MYSQLBACKUPPATH ]; then
 echo "No PT_MYSQLBACKUPPATH set. Exit"
 exit 1
fi
cd $PT_MYSQLBACKUPPATH
if [ $? != 0 ]; then
 echo "cd to PT_MYSQLBACKUPPATH failed. Exit"
 exit 1
fi

Vous pouvez supprimer les fichiers antérieurs à n, dans votre cas :

find -mtime +14 -delete

Supprime les fichiers de plus de 14 jours.

Solution plus compliquée (certainement pas optimale, cependant) pour votre question :

# Get list of newest files. If newest files are first, use head -n 14 instead of 
# head.
files=(`ls | sort | tail -n 14`)
# Loop over all files in this folder
for i in *; do 
 preserve=0; 
 #Check whether this file is in files array:
 for a in ${files[@]}; do 
  if [ $i == $a ]; then 
   preserve=1; 
  fi; 
 done; 
 # If it wasn't, delete it (or in this case, print filename)
 if [ $preserve == 0 ]; then 
  echo $i; # test first, then change this to "rm $i"
 fi;
done

Voici mon utilisation de l'inspiration de ce post :

#!/bin/bash
# Thu Jun 28 13:22:53 CEST 2012
# ${DESTDIR}/files2keep.sh
# Keep the 3 yungest files
# mra at miracleas.dk , deployed on RHEL 6.
InitValues(){
TODAY=`date +"%Y%m%d"`
NOW=`date +"%H%M"`
DESTDIR=/mnt/dbdmp
LOGFILE=?{0}-${TODAY}-${NOW}.log
}
BackupFileMaintenance(){
KEEPFILES=(`ls -lrt ${DESTDIR}/*mysqldump.sql.gz| tail -n 3| awk '{print $9}'`)
    for i in `ls -lrt ${DESTDIR}/*mysqldump.sql.gz | awk '{print $9}'`; do
    preserve=0 
    #Check whether this file is in files array:
        for a in ${KEEPFILES[@]}; do
                if [ $i == $a ]; then
                preserve=1 
                fi 
        done 
    if [ $preserve == 0 ]; then
    echo $i; # then change this to "rm -f $i" after test
    fi
    done
}
InitValues
BackupFileMaintenance
exit

Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Importer des fonctions et des variables dans Bash avec la commande source

  3. Supprimer tous les fichiers d'un dossier sauf le dernier (le plus récent) 20 ?

  4. Bash .hushlogin, Conserver l'heure et l'hôte de la dernière connexion ?

  5. Quel est le but des fichiers utmp, wtmp et btmp sous Linux

Supprimer les anciens fichiers journaux à l'exception du dernier (trié par ordre alphanumérique) ?

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find

Comment ajouter automatiquement un compte utilisateur ET un mot de passe avec un script Bash ?

Script bash pour supprimer tous les fichiers sauf N lorsqu'ils sont triés par ordre alphabétique

Quelles sont les différences entre lsof et netstat sous Linux ?

Script bash pour supprimer les fichiers de plus de x jours avec des sous-répertoires