首页 > 解决方案 > 识别备份目录中的最大目录名称和最大时间戳

问题描述

我有一个 bash 脚本,它不时从配置文件夹中备份一个 json 文件:

/var/app/v1/json/myfile.json

/var/app/v2/json/myfile.json

并将其放入动态创建的目录中:

例如 v1

/var/backup/v1/20180810/myfile.json

/var/backup/v1/20180809/myfile.json

/var/backup/v1/20180808/myfile.json

例如 v2

/var/backup/v2/20180809/myfile.json

/var/backup/v2/20180801/myfile.json

在某些时候,当我需要恢复时,我需要根据版本(v1、v2、v3)确定给定版本的最新可用备份。

例如对于 v1,我需要确定:/var/backup/v1/20180810/myfile.json

例如对于 v2,我需要确定:/var/backup/v2/20180809/myfile.json

例如对于 v3,我需要从以前的版本中识别最新的一个:/var/backup/v2/20180809/myfile.json

有人可以帮助我并指导我如何使用 bash 脚本函数来实现这一点吗?

谢谢,克里斯蒂

标签: bash

解决方案


dir=/var/backup/v1 or /var/backup/v2
find "$dir" -type f -maxdepth 2 -regextype sed \
    -regex ".*/[0-9]\{8\}/myfile.json" |
sort |
tail -n1

首先,我们在目录中找到与您描述的结构匹配的所有文件,因此在/var/backup/v1目录中最多 1 个目录下找到一个以 8 个数字命名的文件夹中的文件,该文件的名称正好是myfile.json. 不,我们可以使用,文件夹时间戳是YYYYMMDD相同的,并且前 3 个级别必须相同 - 我们可以对其进行排序。由于除了目录名称之外所有路径都相同,因此我们将接收使用内部文件夹的数字/时间戳排序的文件夹。然后我们通过打印最后一行来列出最新的文件。

所以过滤器函数可能如下所示:

find_maximum_file() {
    local dir file
    dir="$1"
    file="$2"
    find "$dir" -type f -maxdepth 2 -regextype sed \
        -regex ".*/[0-9]\{8\}/$file" |
    sort |
    tail -n1 |
}

我们可以像这样使用它:

find_maximum_file /var/backup/v1 myfile.json

或像这样:

find_maximum_file /var/backup/v2 myfile.json

可在tutorialspoint获得在线代码。


推荐阅读