У меня есть этот сценарий удара, который приятно создает резервную копию моей базы данных по расписанию крона:
#!/bin/sh
PT_MYSQLDUMPPATH=/usr/bin
PT_HOMEPATH=/home/philosop
PT_TOOLPATH=$PT_HOMEPATH/philosophy-tools
PT_MYSQLBACKUPPATH=$PT_TOOLPATH/mysql-backups
PT_MYSQLUSER=*********
PT_MYSQLPASSWORD="********"
PT_MYSQLDATABASE=*********
PT_BACKUPDATETIME=`date +%s`
PT_BACKUPFILENAME=mysqlbackup_$PT_BACKUPDATETIME.sql.gz
PT_FILESTOKEEP=14
$PT_MYSQLDUMPPATH/mysqldump -u$PT_MYSQLUSER -p$PT_MYSQLPASSWORD --opt $PT_MYSQLDATABASE | gzip -c > $PT_MYSQLBACKUPPATH/$PT_BACKUPFILENAME
Проблема с этим состоит в том, что это будет продолжать выводить резервные копии в папке и не очищать старые файлы. Это то, где переменная PT_FILESTOKEEP
входит. Безотносительно нумеруют, это установлено на, это - сумма резервных копий, которые я хочу сохранить. Все резервные копии являются временем, штампованным так путем упорядочивания им по имени, DESC даст Вам последнее сначала.
Кто-либо может помочь мне с остальной частью сценария Bash добавить уборку файлов? Моему знанию удара недостает, и я не могу соединить код, чтобы сделать остальных.
Во-первых, убедитесь, что Вы находитесь в правильной папке:
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
Можно удалить файлы, более старые, чем n в случае:
find -mtime +14 -delete
Удаляет файлы, более старые, чем 14 дней.
Более сложный (определенно не оптимальный, хотя) решение для Вашего вопроса:
# 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
Вы могли попробовать этого:
ls -r1 $PT_MYSQLBACKUPPATH/ | tail -n +$(($PT_FILESTOKEEP+1)) | xargs rm
ls -r1
перечислит все файлы в обратном порядке, один файл на строку.
tail -n +$number
фильтрует первые файлы $number-1 списка (resp., отображает все файлы, начинающиеся с $number до последнего).
xargs
выполнится rm
со всеми именами файлов от стандартного входа.