标题: 【已解决】20元求助,linux下用文件名给时间date赋值 [打印本页]
作者: sysclock 时间: 2019-5-21 22:21 标题: 【已解决】20元求助,linux下用文件名给时间date赋值
本帖最后由 sysclock 于 2019-5-22 11:49 编辑
1、每个小时产生一个文件,文件名的格式如:20190521133322.919753520-beijing32.dat
这个文件名其中的2019 05 21 13 33 22分别是年月日时分秒;
2、写一个小脚本,通过从文件名中提取年月日时分秒等信息,给嵌入式cpu的赋值(命令是: date -s "2019-05-21"和date -s "13:13:30")
3、已经用cron实现了定时操作,现在只需要一个脚本实现从文件名中提取,并date赋值
=============================================
ps 下面的这几个命令嵌入式linux支持
我自己简单写了一下,搞不定,特来求教,谢谢
ls /tmp/*.dat >t
awk -F "/" '{print $3}' t
awk -F "/" '{a=index($3,".");print substr($3,1,a-1)}' t >t1
awk -F "/" '{a=index($3,".");$year=substr($3,1,a-1)}' t >t1
作者: amwfjhh 时间: 2019-5-22 00:29
没看明白,有没有环境截图,命令回显输出结果之类的,才好作样本分析。
作者: sysclock 时间: 2019-5-22 06:45
本帖最后由 sysclock 于 2019-5-22 06:47 编辑
回复 2# amwfjhh
不好意思,昨天晚上写得太潦草。
重新编辑了一下需求,您看看现在我写明白了没?
谢谢~
作者: amwfjhh 时间: 2019-5-22 08:05
ls回显贴出来看下什么样子,是否记录唯一?
date命令应该有一步到位的更改,查下帮助
作者: sysclock 时间: 2019-5-22 08:07
本帖最后由 sysclock 于 2019-5-22 08:32 编辑
回复 4# amwfjhh
1、 ls回显示的结果如下:
/tmp/20190521133322.919753520-beijing32.dat
root@testGis:~# ls /tmp/*.dat
/tmp/20190521133322.919753520-beijing32.dat
2、记录可能有最多不超过511个文件,请用时间最新的一个
这个文件,是我按了一下按键,cpu生成的。这个时间是来自gps的,现在想用这个时间,同步cpu的时间。原来目录下已经有一些文件了。
root@testGis:~# ls /tmp/*.dat
/tmp/20190521133322.919753520-beijing32.dat
/tmp/20190522002653.783192675-beijing32.dat
/tmp/20190522002655.703093740-beijing32.dat
/tmp/20190522002657.635708240-beijing32.dat
3、我在命令行下手动操作,如下:
root@testGis:~# date -s "2019-05-12"
Sun May 12 00:00:00 UTC 2019
root@testGis:~# date -s "13:33:22"
Sun May 12 13:33:22 UTC 2019
4、现在需要一个脚本,把手动操作,改为cron控制下的自动操作。
5、系统内有awk、sed命令
谢谢~
作者: zaqmlp 时间: 2019-5-22 09:07
- ls /tmp/*.dat >t
- d=`awk -F '/' 'END{print substr($3,1,4)"-"substr($3,5,2)"-"substr($3,7,2)}' t`
- t=`awk -F '/' 'END{print substr($3,9,2)":"substr($3,11,2)":"substr($3,13,2)}' t`
- date -s $d
- date -s $t
复制代码
作者: amwfjhh 时间: 2019-5-22 09:07
本帖最后由 amwfjhh 于 2019-5-22 09:19 编辑
- #!/bin/bash
-
- for i in `ls /tmp/*.dat | sort -r`
- do
- strFile=${i##*/}
- ret=`echo $strFile | grep "[0-9]\{14\}\..*$"`
- if [ -z $ret ]
- then
- continue
- else
- echo $ret
- echo date -s "${strFile:0:4}-${strFile:4:2}-${strFile:6:2}"
- echo date -s "${strFile:8:2}:${strFile:10:2}:${strFile:12:2}"
- break
- fi
- done
复制代码
执行时把date前面的echo去掉即可
作者: Batcher 时间: 2019-5-22 09:11
- #!/bin/bash
- for file in $(ls /tmp/*.dat | awk -F '/' '{print $NF}'); do
- YYYY=${file:0:4}
- MM=${file:4:2}
- DD=${file:6:2}
- HH=${file:8:2}
- MI=${file:10:2}
- SS=${file:12:2}
- echo date -s "$YYYY-$MM-$DD"
- date -s "$YYYY-$MM-$DD"
- echo date -s "$HH:$MI:$SS"
- date -s "$HH:$MI:$SS"
- done
复制代码
作者: Batcher 时间: 2019-5-22 09:12
另外,为何不把 date -s "2019-05-21" 和 date -s "13:13:30" 合并成一个命令呢:
date -s "2019-05-21 13:13:30"
作者: cfwyy77_bat 时间: 2019-5-22 09:24
一行。- ls /tmp/*.dat |awk 'BEGIN{FS="/|\\."}{da=substr($3,1,8);h=substr($3,9,2);m=substr($3,11,2);s=substr($3,13,2);printf("\"%s %s:%s:%s\"",da,h,m,s)}' | xargs date -s
复制代码
作者: sysclock 时间: 2019-5-22 10:23
版上牛人真多,batcher的支付宝短信给俺一个吧。
谢谢大家。
还有一个任务,请大家帮忙,另外发一个帖子了。
作者: amwfjhh 时间: 2019-5-22 10:38
多文件处理时注意一下执行转换文件的唯一性,另注意下防止其它文件生成的.dat文件的干扰。
作者: sysclock 时间: 2019-5-22 10:51
回复 8# Batcher
batcher大人这个文件有个小bug,有多少个dat文件,就echo多少次。
root@testGis:/mnt/mmcblk2/scripts# ./caliTime3
date -s 2019-05-22
Wed May 22 00:00:00 UTC 2019
date -s 02:40:57
Wed May 22 02:40:57 UTC 2019
date -s 2019-05-22
Wed May 22 00:00:00 UTC 2019
date -s 02:46:46
Wed May 22 02:46:46 UTC 2019
date -s 2019-05-22
Wed May 22 00:00:00 UTC 2019
date -s 02:48:45
Wed May 22 02:48:45 UTC 2019
date -s 2019-05-22
Wed May 22 00:00:00 UTC 2019
date -s 02:48:46
Wed May 22 02:48:46 UTC 2019
作者: sysclock 时间: 2019-5-22 10:52
回复 9# Batcher
因为我是新手,炯,
谢谢~
作者: sysclock 时间: 2019-5-22 10:53
回复 7# amwfjhh
这个代码测试是比较完美的。
后来人请参考此。
谢谢~
作者: Batcher 时间: 2019-5-22 10:57
回复 5# sysclock
2、记录可能有最多不超过511个文件,请用时间最新的一个
以后发帖求助的时候,建议把所有需求都更新在顶楼,否则别人帮你写代码的时候很可能无法满足你的真实需求。
作者: Batcher 时间: 2019-5-22 10:59
回复 13# sysclock
把date命令放在for循环外面试试- #!/bin/bash
- for file in $(ls /tmp/*.dat | awk -F '/' '{print $NF}'); do
- YYYY=${file:0:4}
- MM=${file:4:2}
- DD=${file:6:2}
- HH=${file:8:2}
- MI=${file:10:2}
- SS=${file:12:2}
- done
- echo date -s "$YYYY-$MM-$DD"
- date -s "$YYYY-$MM-$DD"
- echo date -s "$HH:$MI:$SS"
- date -s "$HH:$MI:$SS"
复制代码
作者: Batcher 时间: 2019-5-22 11:00
回复 11# sysclock
http://bbs.bathome.net/thread-10403-1-1.html
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |