Můžete zkusit toto:
ls -r1 $PT_MYSQLBACKUPPATH/ | tail -n +$(($PT_FILESTOKEEP+1)) | xargs rm
ls -r1
zobrazí seznam všech souborů v opačném pořadí, jeden soubor na řádek.
tail -n +$number
odfiltruje první soubory $number-1 ze seznamu (resp. zobrazí všechny soubory začínající od $number až po poslední).
xargs
spustí rm
se všemi názvy souborů ze standardního vstupu.
Nejprve se ujistěte, že jste ve správné složce:
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
Můžete odstranit soubory starší než n, ve vašem případě:
find -mtime +14 -delete
Smaže soubory starší než 14 dní.
Složitější (určitě ne optimální) řešení vaší otázky:
# 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
Zde je moje použití inspirace z tohoto příspěvku:
#!/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
Jak mohu spustit SSH na jiném portu než 22?
Předávání možností programu:jaká je konvence pro jednu pomlčku vs dvě?