如果一个目录/dat
包含具有文件名的文件,例如
base-2020-01-01.dat
base-2020-01-01-incremental-2020-01-02.dat
base-2020-01-01-incremental-2020-01-03.dat
base-2020-01-03.dat
base-2020-01-03-incremental-2020-01-04.dat
base-2020-01-03-incremental-2020-01-05.dat
我们如何编写一个选择的 bash 脚本base-*.dat
不带 -incremental-*
的文件名子字符串,并且文件名中的日期是最近的日期。 在本例中,我们要选择
base-2020-01-03.dat
和 2020-01-03
.如果不同的文件命名约定更容易解析,那就更好了!
最佳答案
与现代 GNU
工具:使用 find
, grep -P
和 bash
(带错误处理)
read file < <(
find /data -maxdepth 1 -name 'base*.dat' ! -name '*incremental*' \
-printf '%f\n' | sort -nr | head -n1
)
set -e
echo "${file:?$(tput setaf 1)no match$(tput sgr0;exit 1)}"
date=$(grep -oP "\d{4}-\d{2}-\d{2}" <<< "$file")
echo "$date"
输出base-2020-01-03.dat
2020-01-03
关于string - 用于选择具有最新日期且不带子字符串的文件名的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62685725/