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 脚本函数来实现这一点吗?
谢谢,克里斯蒂
解决方案
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获得在线代码。
推荐阅读
- angular - Npm start 在添加“懒惰”模块后停留在 70%
- c# - 从 string.split 创建 xml 结构
- r - 在 SharePoint 上运行 R Shiny 应用程序
- swift - 无法通过 Cloud Functions (onCall) 从 Cloud Firestore 将 json 数组返回给 Swift
- python - Chrome 驱动程序无法与代理一起使用
- c# - 如何在 C# 中使最后一个单词大写?
- r - 如何在数据表中为“迷你图”对象创建弹出窗口?
- php - 在codeigniter中为where子句传递不同的类型变量
- javascript - 更改数据和时间格式
- c# - 在进行交易时无法找到实体