Tha*_*wen 4 backup directory sort timestamps
我有一个充满备份文件夹的目录,名称格式为 yyyy-MM-dd--HH:mm:ss
如果我输入相同格式的日期,有没有办法获取在它之后排序的第一个目录,并将该文件夹复制到其他地方?
例如,如果我的备份列表如下所示:
2019-12-04--16:12:56
2019-12-09--13:36:53
2020-01-23--13:24:13
2020-01-23--13:47:03
Run Code Online (Sandbox Code Playgroud)
然后我输入2020-01-05--00:00:00,我想恢复2020-01-23--13:24:13
for dir in ????-??-??--??:??:??/; do
if [[ $dir > "2020-01-05--00:00:00" ]]; then
printf '%s\n' "$dir"
# process "$dir" here
break
fi
done
Run Code Online (Sandbox Code Playgroud)
上面的脚本将遍历当前目录中名称与模式匹配的目录????-??-??--??:??:??。
对于每个目录,它与字符串进行比较2020-01-05--00:00:00。如果按字典顺序在该字符串之后排序,则打印目录名称并退出循环。
这是有效的,因为由路径名扩展产生的列表是根据当前的整理顺序排序的(就像ls默认情况下对列表进行排序一样)。
要将该目录复制到其他地方,请将注释替换为类似
rsync -av "$dir" /somewhere/elsewhere
Run Code Online (Sandbox Code Playgroud)
以下是一个脚本,它从第一个命令行参数中获取特定字符串并执行相同的操作:
rsync -av "$dir" /somewhere/elsewhere
Run Code Online (Sandbox Code Playgroud)
使用您列出的目录对此进行测试:
#!/bin/bash
for dir in ????-??-??--??:??:??/; do
if [[ $dir > "$1" ]]; then
printf '%s\n' "$dir"
# process "$dir" here
break
fi
done
Run Code Online (Sandbox Code Playgroud)
$ ls -l
total 10
drwxr-xr-x 2 myself wheel 512 Jan 24 11:14 2019-12-04--16:12:56
drwxr-xr-x 2 myself wheel 512 Jan 24 11:14 2019-12-09--13:36:53
drwxr-xr-x 2 myself wheel 512 Jan 24 11:14 2020-01-23--13:24:13
drwxr-xr-x 2 myself wheel 512 Jan 24 11:14 2020-01-23--13:47:03
-rw-r--r-- 1 myself wheel 119 Jan 24 11:23 script.sh
Run Code Online (Sandbox Code Playgroud)
我想出了
$ printf '%s\n' ????-??-??--??:??:?? | awk '$1 > "2020-01-05--00:00:00"{print;exit}'
2020-01-23--13:24:13
Run Code Online (Sandbox Code Playgroud)