Bash 标识备份目录中的最大目录名和最大时间戳

Bash 标识备份目录中的最大目录名和最大时间戳,bash,Bash,我有一个bash脚本,它不时从配置文件夹备份一个json文件: /var/app/v1/json/myfile.json /var/app/v2/json/myfile.json 并将其放入动态创建的目录中: e、 g.v1 /var/backup/v1/20180810/myfile.json /var/backup/v1/20180809/myfile.json /var/backup/v1/20180808/myfile.json e、 g.v2 /var/backup/v2/201808

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

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

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

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

e、 g.v1

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

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

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

e、 g.v2

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

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

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

e、 g.对于v1,我需要标识:/var/backup/v1/20180810/myfile.json

e、 g.对于v2,我需要标识:/var/backup/v2/20180809/myfile.json

e、 g.对于v3,我需要从以前的版本中识别最新版本:/var/backup/v2/20180809/myfile.json

有没有人可以帮助我,并给我一些指导,告诉我如何使用bash脚本函数来实现这一点

谢谢, 克里斯蒂

首先,我们在目录中找到与您描述的结构匹配的所有文件,因此在
/var/backup/v1
目录中最多1个目录下,在名为8的文件夹中找到一个文件,该文件夹的名称正好是
myfile.json
。 不,我们可以使用,文件夹时间戳是
yyyyymmdd
,并且它是相同的,前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
我们可以这样使用它:

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
或者像这样:

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

在线代码可以在。

上找到,只需转到
rdiff备份
。我不懂v3。“以前版本的最新版本”与v2有何不同?如果我需要恢复v2,我有一个现有的v2,我需要在v2中标识最新的时间戳。如果我需要恢复v3,我没有任何v3,我需要回退到以前的版本,即v2。现在,如上所述,应用了相同的逻辑,我需要从v2目录中识别最新的时间戳。