题
我有一个的对的bash脚本的,1转储MySQL的DBS,和第二清除旧备份强>
我一直依赖于日期,所以任何文件超过7天被清除,新的备份每天创建的。其结果是一组备份7天回来。
现在好了,我有20+ DBS的我已经分居,每天工作到每天和每周的工作。如果我继续使用查找和日期的方法我会失去过去的一周。
问题
我如何按日期排序一个发现的输出,然后清除所有,但最近7。(因此,即使最近的是2个月大,但它仍然)
这是据我得到的,但它并不如预期。也许使用LS可能是更好的选择是9find从利用日期作为用于清洗的唯一标准)
的残余OLDFILES=`find -regex .*sql.*`
set -- $OLDFILES
if [ -z $1 ]
then
printf "\tNo files matching purge criteria\n" | tee -a $LOGFILE
else
printf "\tSQL Files being Delete from $HERE\n" | tee -a $LOGFILE
printf "\t\t%s\n" $OLDFILES | tee -a $LOGFILE
fi
# $RETAIN is the # of recent to keep
# so I want to grab a subset from 0 to (total - retain), and purge them
TOBURN=$(( $# - $RETAIN ))
printf " grab first %s files. %s - %s" $TOBURN $# $RETAIN
if [ $TOBURN -gt 0 ]
then
TOPURGE=("$@:0:$TOBURN")
printf "\n\nREMOVING..\n\t\t%s\n" $TOPURGE
fi
<强>现有文件强>
./webbmaster_bellarose_joomla_01-09-2010.sql.gz
./webbmaster_bellarose_joomla_12-25-2009.sql.gz
./webbmaster_bellarose_joomla_01-10-2010.sql.gz
./webbmaster_bellarose_joomla_01-04-2010.sql.gz
./webbmaster_bellarose_joomla_01-25-2010.sql.gz
./webbmaster_bellarose_joomla_01-29-2010.sql.gz
./webbmaster_bellarose_joomla_12-30-2009.sql.gz
./webbmaster_bellarose_joomla_12-28-2009.sql.gz
./webbmaster_bellarose_joomla_01-06-2010.sql.gz
./webbmaster_bellarose_joomla_01-13-2010.sql.gz
./webbmaster_bellarose_joomla_01-24-2010.sql.gz
./webbmaster_bellarose_joomla_12-21-2009.sql.gz
./webbmaster_bellarose_joomla_12-24-2009.sql.gz
./webbmaster_bellarose_joomla_12-27-2009.sql.gz
./webbmaster_bellarose_joomla_01-26-2010.sql.gz
./webbmaster_bellarose_joomla_12-17-2009.sql.gz
./webbmaster_bellarose_joomla_01-03-2010.sql.gz
./webbmaster_bellarose_joomla_01-21-2010.sql.gz
./webbmaster_bellarose_joomla_01-20-2010.sql.gz
./webbmaster_bellarose_joomla_01-16-2010.sql.gz
./webbmaster_bellarose_joomla_12-31-2009.sql.gz
./webbmaster_bellarose_joomla_01-11-2010.sql.gz
./webbmaster_bellarose_joomla_01-05-2010.sql.gz
./webbmaster_bellarose_joomla_01-14-2010.sql.gz
./webbmaster_bellarose_joomla_01-22-2010.sql.gz
./webbmaster_bellarose_joomla_01-12-2010.sql.gz
./webbmaster_bellarose_joomla_01-17-2010.sql.gz
./webbmaster_bellarose_joomla_12-18-2009.sql.gz
./webbmaster_bellarose_joomla_12-20-2009.sql.gz
./webbmaster_bellarose_joomla_01-08-2010.sql.gz
./webbmaster_bellarose_joomla_12-22-2009.sql.gz
./webbmaster_bellarose_joomla_01-27-2010.sql.gz
./webbmaster_bellarose_joomla_12-23-2009.sql.gz
./webbmaster_bellarose_joomla_01-07-2010.sql.gz
./webbmaster_bellarose_joomla_12-26-2009.sql.gz
./webbmaster_bellarose_joomla_01-19-2010.sql.gz
./webbmaster_bellarose_joomla_12-29-2009.sql.gz
./webbmaster_bellarose_joomla_01-15-2010.sql.gz
./webbmaster_bellarose_joomla_01-28-2010.sql.gz
./webbmaster_bellarose_joomla_01-01-2010.sql.gz
./webbmaster_bellarose_joomla_01-18-2010.sql.gz
./webbmaster_bellarose_joomla_01-02-2010.sql.gz
./webbmaster_bellarose_joomla_01-23-2010.sql.gz
./webbmaster_bellarose_joomla_12-19-2009.sql.gz
作为吹扫目标(我想集为简单RM -f $变种变量)强>
./webbmaster_bellarose_joomla_01-09-2010.sql.gz
./webbmaster_bellarose_joomla_12-25-2009.sql.gz
./webbmaster_bellarose_joomla_01-10-2010.sql.gz
./webbmaster_bellarose_joomla_01-04-2010.sql.gz
./webbmaster_bellarose_joomla_12-30-2009.sql.gz
./webbmaster_bellarose_joomla_12-28-2009.sql.gz
./webbmaster_bellarose_joomla_01-06-2010.sql.gz
./webbmaster_bellarose_joomla_01-13-2010.sql.gz
./webbmaster_bellarose_joomla_12-21-2009.sql.gz
./webbmaster_bellarose_joomla_12-24-2009.sql.gz
./webbmaster_bellarose_joomla_12-27-2009.sql.gz
./webbmaster_bellarose_joomla_12-17-2009.sql.gz
./webbmaster_bellarose_joomla_01-03-2010.sql.gz
./webbmaster_bellarose_joomla_01-21-2010.sql.gz
./webbmaster_bellarose_joomla_01-20-2010.sql.gz
./webbmaster_bellarose_joomla_01-16-2010.sql.gz
./webbmaster_bellarose_joomla_12-31-2009.sql.gz
./webbmaster_bellarose_joomla_01-11-2010.sql.gz
./webbmaster_bellarose_joomla_01-05-2010.sql.gz
./webbmaster_bellarose_joomla_01-14-2010.sql.gz
./webbmaster_bellarose_joomla_01-22-2010.sql.gz
./webbmaster_bellarose_joomla_01-12-2010.sql.gz
./webbmaster_bellarose_joomla_01-17-2010.sql.gz
./webbmaster_bellarose_joomla_12-18-2009.sql.gz
./webbmaster_bellarose_joomla_12-20-2009.sql.gz
./webbmaster_bellarose_joomla_01-08-2010.sql.gz
./webbmaster_bellarose_joomla_12-22-2009.sql.gz
./webbmaster_bellarose_joomla_12-23-2009.sql.gz
./webbmaster_bellarose_joomla_01-07-2010.sql.gz
./webbmaster_bellarose_joomla_12-26-2009.sql.gz
./webbmaster_bellarose_joomla_01-19-2010.sql.gz
./webbmaster_bellarose_joomla_12-29-2009.sql.gz
./webbmaster_bellarose_joomla_01-15-2010.sql.gz
./webbmaster_bellarose_joomla_01-01-2010.sql.gz
./webbmaster_bellarose_joomla_01-18-2010.sql.gz
./webbmaster_bellarose_joomla_01-02-2010.sql.gz
./webbmaster_bellarose_joomla_12-19-2009.sql.gz
(1/23日期 - 1/29是原封不动)
解决方案
请做自己(和其他人)一个大忙,并开始写在 ISO-日期8601 格式(即YYYY-MM-DD)强>
E.g。代替
./webbmaster_bellarose_joomla_12-29-2009.sql.gz
您将有
./webbmaster_bellarose_joomla_2009-12-29.sql.gz
这样做了很多好处的,最重要的在这里,时间和字母顺序变得相同。无需查找,只列出文件,相反的顺序,删除第7行,并删除任何剩余文件:
ls *sql* | tac | sed 1,7d | tr '\012' '\000' | xargs -0 --no-run-if-empty rm
更新:你说的“前进”是什么意思?由于FAS我可以告诉我的解决方案解决您的问题100%:
/tmp/so>cat existing_files
./webbmaster_bellarose_joomla-2009-12-17.sql.gz
./webbmaster_bellarose_joomla-2009-12-18.sql.gz
./webbmaster_bellarose_joomla-2009-12-19.sql.gz
./webbmaster_bellarose_joomla-2009-12-20.sql.gz
./webbmaster_bellarose_joomla-2009-12-21.sql.gz
./webbmaster_bellarose_joomla-2009-12-22.sql.gz
./webbmaster_bellarose_joomla-2009-12-23.sql.gz
./webbmaster_bellarose_joomla-2009-12-24.sql.gz
./webbmaster_bellarose_joomla-2009-12-25.sql.gz
./webbmaster_bellarose_joomla-2009-12-26.sql.gz
./webbmaster_bellarose_joomla-2009-12-27.sql.gz
./webbmaster_bellarose_joomla-2009-12-28.sql.gz
./webbmaster_bellarose_joomla-2009-12-29.sql.gz
./webbmaster_bellarose_joomla-2009-12-30.sql.gz
./webbmaster_bellarose_joomla-2009-12-31.sql.gz
./webbmaster_bellarose_joomla-2010-01-01.sql.gz
./webbmaster_bellarose_joomla-2010-01-02.sql.gz
./webbmaster_bellarose_joomla-2010-01-03.sql.gz
./webbmaster_bellarose_joomla-2010-01-04.sql.gz
./webbmaster_bellarose_joomla-2010-01-05.sql.gz
./webbmaster_bellarose_joomla-2010-01-06.sql.gz
./webbmaster_bellarose_joomla-2010-01-07.sql.gz
./webbmaster_bellarose_joomla-2010-01-08.sql.gz
./webbmaster_bellarose_joomla-2010-01-09.sql.gz
./webbmaster_bellarose_joomla-2010-01-10.sql.gz
./webbmaster_bellarose_joomla-2010-01-11.sql.gz
./webbmaster_bellarose_joomla-2010-01-12.sql.gz
./webbmaster_bellarose_joomla-2010-01-13.sql.gz
./webbmaster_bellarose_joomla-2010-01-14.sql.gz
./webbmaster_bellarose_joomla-2010-01-15.sql.gz
./webbmaster_bellarose_joomla-2010-01-16.sql.gz
./webbmaster_bellarose_joomla-2010-01-17.sql.gz
./webbmaster_bellarose_joomla-2010-01-18.sql.gz
./webbmaster_bellarose_joomla-2010-01-19.sql.gz
./webbmaster_bellarose_joomla-2010-01-20.sql.gz
./webbmaster_bellarose_joomla-2010-01-21.sql.gz
./webbmaster_bellarose_joomla-2010-01-22.sql.gz
./webbmaster_bellarose_joomla-2010-01-23.sql.gz
./webbmaster_bellarose_joomla-2010-01-24.sql.gz
./webbmaster_bellarose_joomla-2010-01-25.sql.gz
./webbmaster_bellarose_joomla-2010-01-26.sql.gz
./webbmaster_bellarose_joomla-2010-01-27.sql.gz
./webbmaster_bellarose_joomla-2010-01-28.sql.gz
./webbmaster_bellarose_joomla-2010-01-29.sql.gz
/tmp/so>cat targets_for_purging
./webbmaster_bellarose_joomla-2009-12-17.sql.gz
./webbmaster_bellarose_joomla-2009-12-18.sql.gz
./webbmaster_bellarose_joomla-2009-12-19.sql.gz
./webbmaster_bellarose_joomla-2009-12-20.sql.gz
./webbmaster_bellarose_joomla-2009-12-21.sql.gz
./webbmaster_bellarose_joomla-2009-12-22.sql.gz
./webbmaster_bellarose_joomla-2009-12-23.sql.gz
./webbmaster_bellarose_joomla-2009-12-24.sql.gz
./webbmaster_bellarose_joomla-2009-12-25.sql.gz
./webbmaster_bellarose_joomla-2009-12-26.sql.gz
./webbmaster_bellarose_joomla-2009-12-27.sql.gz
./webbmaster_bellarose_joomla-2009-12-28.sql.gz
./webbmaster_bellarose_joomla-2009-12-29.sql.gz
./webbmaster_bellarose_joomla-2009-12-30.sql.gz
./webbmaster_bellarose_joomla-2009-12-31.sql.gz
./webbmaster_bellarose_joomla-2010-01-01.sql.gz
./webbmaster_bellarose_joomla-2010-01-02.sql.gz
./webbmaster_bellarose_joomla-2010-01-03.sql.gz
./webbmaster_bellarose_joomla-2010-01-04.sql.gz
./webbmaster_bellarose_joomla-2010-01-05.sql.gz
./webbmaster_bellarose_joomla-2010-01-06.sql.gz
./webbmaster_bellarose_joomla-2010-01-07.sql.gz
./webbmaster_bellarose_joomla-2010-01-08.sql.gz
./webbmaster_bellarose_joomla-2010-01-09.sql.gz
./webbmaster_bellarose_joomla-2010-01-10.sql.gz
./webbmaster_bellarose_joomla-2010-01-11.sql.gz
./webbmaster_bellarose_joomla-2010-01-12.sql.gz
./webbmaster_bellarose_joomla-2010-01-13.sql.gz
./webbmaster_bellarose_joomla-2010-01-14.sql.gz
./webbmaster_bellarose_joomla-2010-01-15.sql.gz
./webbmaster_bellarose_joomla-2010-01-16.sql.gz
./webbmaster_bellarose_joomla-2010-01-17.sql.gz
./webbmaster_bellarose_joomla-2010-01-18.sql.gz
./webbmaster_bellarose_joomla-2010-01-19.sql.gz
./webbmaster_bellarose_joomla-2010-01-20.sql.gz
./webbmaster_bellarose_joomla-2010-01-21.sql.gz
./webbmaster_bellarose_joomla-2010-01-22.sql.gz
/tmp/so>sed 's/\(.\{29\}\)_\(..-..\)-\(....\)/\1-\3-\2/' existing_files | sort > existing_files.8601
/tmp/so>sed 's/\(.\{29\}\)_\(..-..\)-\(....\)/\1-\3-\2/' targets_for_purging | sort > targets_for_purging.8601
/tmp/so>mkdir files
/tmp/so>cd files
/tmp/so/files>xargs touch < ../existing_files.8601
/tmp/so/files>ls -1
webbmaster_bellarose_joomla-2009-12-17.sql.gz
webbmaster_bellarose_joomla-2009-12-18.sql.gz
webbmaster_bellarose_joomla-2009-12-19.sql.gz
webbmaster_bellarose_joomla-2009-12-20.sql.gz
webbmaster_bellarose_joomla-2009-12-21.sql.gz
webbmaster_bellarose_joomla-2009-12-22.sql.gz
webbmaster_bellarose_joomla-2009-12-23.sql.gz
webbmaster_bellarose_joomla-2009-12-24.sql.gz
webbmaster_bellarose_joomla-2009-12-25.sql.gz
webbmaster_bellarose_joomla-2009-12-26.sql.gz
webbmaster_bellarose_joomla-2009-12-27.sql.gz
webbmaster_bellarose_joomla-2009-12-28.sql.gz
webbmaster_bellarose_joomla-2009-12-29.sql.gz
webbmaster_bellarose_joomla-2009-12-30.sql.gz
webbmaster_bellarose_joomla-2009-12-31.sql.gz
webbmaster_bellarose_joomla-2010-01-01.sql.gz
webbmaster_bellarose_joomla-2010-01-02.sql.gz
webbmaster_bellarose_joomla-2010-01-03.sql.gz
webbmaster_bellarose_joomla-2010-01-04.sql.gz
webbmaster_bellarose_joomla-2010-01-05.sql.gz
webbmaster_bellarose_joomla-2010-01-06.sql.gz
webbmaster_bellarose_joomla-2010-01-07.sql.gz
webbmaster_bellarose_joomla-2010-01-08.sql.gz
webbmaster_bellarose_joomla-2010-01-09.sql.gz
webbmaster_bellarose_joomla-2010-01-10.sql.gz
webbmaster_bellarose_joomla-2010-01-11.sql.gz
webbmaster_bellarose_joomla-2010-01-12.sql.gz
webbmaster_bellarose_joomla-2010-01-13.sql.gz
webbmaster_bellarose_joomla-2010-01-14.sql.gz
webbmaster_bellarose_joomla-2010-01-15.sql.gz
webbmaster_bellarose_joomla-2010-01-16.sql.gz
webbmaster_bellarose_joomla-2010-01-17.sql.gz
webbmaster_bellarose_joomla-2010-01-18.sql.gz
webbmaster_bellarose_joomla-2010-01-19.sql.gz
webbmaster_bellarose_joomla-2010-01-20.sql.gz
webbmaster_bellarose_joomla-2010-01-21.sql.gz
webbmaster_bellarose_joomla-2010-01-22.sql.gz
webbmaster_bellarose_joomla-2010-01-23.sql.gz
webbmaster_bellarose_joomla-2010-01-24.sql.gz
webbmaster_bellarose_joomla-2010-01-25.sql.gz
webbmaster_bellarose_joomla-2010-01-26.sql.gz
webbmaster_bellarose_joomla-2010-01-27.sql.gz
webbmaster_bellarose_joomla-2010-01-28.sql.gz
webbmaster_bellarose_joomla-2010-01-29.sql.gz
/tmp/so/files>ls *sql* | tac | sed 1,7d | tr '\012' '\000' | xargs -0 --no-run-if-empty rm
/tmp/so/files>ls -1 ./*
./webbmaster_bellarose_joomla-2010-01-23.sql.gz
./webbmaster_bellarose_joomla-2010-01-24.sql.gz
./webbmaster_bellarose_joomla-2010-01-25.sql.gz
./webbmaster_bellarose_joomla-2010-01-26.sql.gz
./webbmaster_bellarose_joomla-2010-01-27.sql.gz
./webbmaster_bellarose_joomla-2010-01-28.sql.gz
./webbmaster_bellarose_joomla-2010-01-29.sql.gz
/tmp/so/files>comm -3 ../existing_files.8601 ../targets_for_purging.8601
./webbmaster_bellarose_joomla-2010-01-23.sql.gz
./webbmaster_bellarose_joomla-2010-01-24.sql.gz
./webbmaster_bellarose_joomla-2010-01-25.sql.gz
./webbmaster_bellarose_joomla-2010-01-26.sql.gz
./webbmaster_bellarose_joomla-2010-01-27.sql.gz
./webbmaster_bellarose_joomla-2010-01-28.sql.gz
./webbmaster_bellarose_joomla-2010-01-29.sql.gz
/tmp/so/files>
其他提示
如果这些文件都在一个目录(即你不需要使用find虽然递归子目录),你可以使用-t参数LS(1)时间整理文件列表,然后取下第一7项与尾部(1)。
rm -f $(ls -t *sql* | tail -n +8)
[编辑:我添加-f万一取代产生一个空列表]
或在环...
ls -t *sql* | tail -n +8 | while read file
echo "Purging: $file"
rm "$file"
done
到尾的参数是8,因为你希望它开始从起第八线拖尾(即下降前7)。
删除文件后,你可以燃烧还剩下些什么。
OLDIFS="$IFS"
IFS=$'\n'
topurge=($(find -mindepth 1 -printf "%T@ %P\n" | sort -n -r | cut -d' ' -f 2- | tail -n +7))
IFS="$OLDIFS"
下面是一个想法:
oldest_to_keep=`find . -name \*.sql | xargs \ls -1rc | tail -7 | head -1`
find . -name \*.sql -not -samefile $oldest_to_keep -not -newer $oldest_to_keep
当第二个find应该有-exec rm \{\} ;
如果你相信自己,这是明智的。 :)
不隶属于 StackOverflow