我使用cron每天备份一个重要的文件夹。它将与当前日期一起存储的文件夹名称。
现在我的要求是我只需要保留当天和最后两天的备份。
即我只想保留:
它必须自动删除的剩余文件夹。请告诉我们如何使用shell脚本。
以下是我的备份文件夹结构。
test_2016-10-30.tgz test_2016-11-01.tgz test_2016-11-03.tgz
test_2016-10-31.tgz test_2016-11-02.tgz test_2016-11-04.tgz
答案 0 :(得分:1)
## Get roughly the same area as in the Google map
bbox <- c(left=-1.88, bottom=55.625, right=-1.74, top=55.685)
## Broken in ggmap 2.6.1, try GitHub version (which may have other problems)
foo3 <- get_map(location = bbox, zoom = 13, crop = FALSE,
source = "stamen", maptype = "terrain", force = FALSE)
## Compare the two map sources / types
dev.new()
print(ggmap(foo2))
dev.new()
print(ggmap(foo3))
您可以打印目录中除最后3个文件之外的所有文件。
将此输出传递到ls -lrt | head -n -3 | awk '{print $9}
,您将获得所需的结果。
答案 1 :(得分:0)
你可以附加备份脚本的结尾;
@Component
public class ResponseInterceptor extends HandlerInterceptorAdapter {
@Override
public void postHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler,
final ModelAndView modelAndView) throws IOException {
if (response.getContentType() == null || response.getContentType().equals("")) {
response.setContentType("application/json");
}
}
}
也用这个;
find ./backupFolder -name "test_*.tgz" -mtime +3 -type f -delete
答案 2 :(得分:0)
为要保留的文件生成数组:
names=()
for d in {0..2}; do
names+=( "test_"$(date -d"$d days ago" "+%Y-%m-%d")".tgz" )
done
所以它看起来像这样:
$ printf "%s\n" "${names[@]}"
test_2016-11-04.tgz
test_2016-11-03.tgz
test_2016-11-02.tgz
然后,循环浏览文件和keep those that are not in the array:
for file in test_*.tgz; do
[[ ! ${names[*]} =~ "$file" ]] && echo "remove $file" || echo "keep $file"
done
如果在您的目录上运行,则会产生如下输出:
remove test_2016-10-30.tgz
remove test_2016-10-31.tgz
remove test_2016-11-01.tgz
keep test_2016-11-02.tgz
keep test_2016-11-03.tgz
keep test_2016-11-04.tgz
所以现在只需要用echo
更有意义的内容替换那些rm
。