我有一个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脚本功能实现这一目标吗?
谢谢, 克里斯蒂
答案 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上找到在线代码。