我遇到了bash脚本的问题。我有一个特定位置的文件列表。我只需要从中抽出一个日期并将其与另一个日期进行比较。
for i in *.gz; do
echo $i | grep -Eo '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}'
done
以上是grep
来自文件名的正确日期,但仅限于我使用echo
时。在另一种情况下,我有错误。我试过了:
tmp=$(echo $i | grep -Eo '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}')
也不行。有什么建议?我会很感激小帮助!
答案 0 :(得分:0)
我根本不会使用grep
;使用bash
的内置正则表达式处理。
for i in *.gz; do
[[ $i =~ [[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} ]]
echo "${BASH_REMATCH[0]}"
done
答案 1 :(得分:0)
绕过它,可以使用stat命令
for i in *.gz; do
tmp=$(stat "$i" | awk '/Modify/ { print $2}' )
done
或者如果你想要一个数组
declare -a tmp
tmp+=$(
for i in *.gz; do
stat "$i" | awk '/Modify/ { print $2}'
done
)
优点是,它独立于文件名
编辑: 我还不能评论别人的答案。这就是你比较日期的方式
sixago=$(date --date='-6 month' +%s)
tmp=$(date --date="$tmp" +%s)
if [ "$tmp" -gt "$sixago" ];then
...
fi