确定备份目录中的最大目录名称和最大时间戳

时间:2018-10-08 08:38:52

标签: bash

我有一个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脚本功能实现这一目标吗?

谢谢, 克里斯蒂

1 个答案:

答案 0 :(得分:1)

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个数字组成,名称确切为{{1} }。 不,我们无法使用,文件夹时间戳为myfile.json并且相同,并且前三个级别必须相同-我们可以对其进行排序。由于除了目录名以外的所有路径都相同,因此我们将收到使用内部文件夹的编号/时间戳排序的文件夹。然后,我们通过打印最后一行来列出最新文件。

所以过滤器功能可能看起来像这样:

YYYYMMDD

我们可以这样使用它:

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

可在tutorialspoint上找到在线代码。