Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本

Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本,第1张

使用date命令加上合适的时间格式化字符串(+%s),会显示当前时间(或-d参数指定的时间)与1970-01-01 00:00:00相差的秒数(详细可以参考date的man手册)

所以基本想法就是使用date命令分别获取当前时间与文件修改时间的秒数,然后看这2个秒数之间是否有相差180秒以上。

获取当前时间比较简单,直接date +%s就ok了

下面看看如何获取文件时间

使用stat 命令后面跟一个文件名可以获取文件的状态,包括文件修改时间。其中文件修改时间会单独一行显示,格式如下:Modify: 2013-02-21 17:58:05404876407 +0800 (具体的精度可能系统不同略微有些差别,但大致格式是这样)

所以我们可以stat myfilename | grep Modify来获取文件的修改时间的信息,然后通过awk分别获取时间的日期和时间段

stat myfilename | grep Modify | awk '{print $2}'  #这句获取了日期段,即上面例子里面的2013-02-21

stat myfilename | grep Modify | awk '{split($3,var,"");print var[1]}' #这句获取了时间段,即上面例子里面的17:58:05,具体关于awk的使用可以参考awk的使用手册

那么现在可以获取文件修改时间与1970-01-01 00:00:00相差的描述了,就是date -d "$file_date $file_time" +%s

那么这个时间与当前时间想减的结果与180相比就可以知道是否满足条件了,满足条件的话就可以执行相应的命令。

参考代码如下:

current_datetime=`date +%s`

filedate=`stat tttxt | grep Modify | awk '{print $2}'`

filetime=`stat tttxt | grep Modify | awk '{split($3,var,"");print var[1]}'`

file_datetime=`date -d "$filedate $filetime" +%s

timedelta=`expr $current_datetime - $file_datetime`

if [ "$timedelta" -gt "180" ];then

echo "match condition"

fi

Linux常用命令

ls常用命令

cd常用命令

rm常用命令

grep常用命令

grep命令用于查找文件里符合条件的字符串。

常用指令名称

-A

–after-context

显示符合范本样式的那一行之外及该行之后的内容

输出内容:

aaaa // 该行高亮

bbbb

-b

–byte-offset

输出匹配行并且在在该行前展示第几行

输出内容:

0: aaaa

-c

–count

输出符合匹配字符串的行数

输出内容:

1

其他命令

获取当前界面元素

获取任务列表

app入口

启动应用

列出当前已连接的设备

输出内容:

连接指定设备

例:(SERIAL的值为adb devices -l 输出的值)

屏幕截图

获取屏幕截图

录制视频

获取录制视频

测试界面性能

输出中会包含录制阶段所发生的动画帧的相关性能信息。以下命令使用 gfxinfo 收集指定软件包名称的界面性能数据:

输出最近帧性能信息

检查网络诊断信息

netstats 服务可提供自设备上次启动以来收集的网络使用情况统计信息

检查电池诊断信息

batterystats 服务会生成关于设备电池用量的统计数据

options列表

使用以下命令以计算机可读的 CSV 格式生成 batterystats 输出:

输出内容:

##1控制执行时间间隔:使用sleep:

echo hello

sleep 10s #等10秒

echo hello

sleep 10m #等10分钟

echo hello

sleep 10h #等10hour

echo hello

sleep 10d #等10days

##2控制执行时间点:使用crontab

Step 1:

使用命令crontab -e编辑一个定时执行的任务或在/var/spool/cron/crontabs目录下新建一个与自己用户名相同的任务

即:

#每隔一分钟执行一次后台程序tmpmail

/home/milch/tmpmail

顺便提一下crontab中的命令格式:

第一个 表示分钟 (0-59),

第二个 表示小时 (0-23),

第三个 表示月份中的某一天 (1-31),

第四个 表示一年中的某一月 (1-12),

第五个 表示一周中的星期几 (0-6 with 0=Sunday)

实例说明

# crontab -l

# DO NOT EDIT THIS FILE - edit the master and reinstall

# (/tmp/crontab3672 installed on Thu Jan 1 15:55:18 2004)

# (Cron version -- $Id: crontabc,v 213 1994/01/17 03:20:37 vixie Exp $)

0 0-23/6 /usr/bin/webalizer

30 3 /root/fbin/bak-web

#

先前曾提到,crontab 的格式分成六个部分,前五个是时间参数。在上例中你会发现除了数字与英文名称,有使用到符号"",这个符号代表每一单位的意思,譬如 30 3 既代表 30分 3点 每日 每月 星期的每天。

时间的指定,可以是单一的数字,或几个数字用逗号来连接。看下例

30 3,12 /root/fbin/bak-web

其中的第二项为 3,12,这代表 3 以及 12 小时的意思。再来看下例

30 /6 /root/fbin/bak-web

我把第二项改成 /6 这代表每 6 小时,也相当於 6,12,18,24 的作用。此外还有一个区段的做法

30 8-18/2 /root/fbin/bak-web

我把第二项改成 8-18/2 这代表在 8 小时到 18 小时之间每 2 小时,也相当於 8,10,12,14,16,18 的作用。

1file /home/ |awk -F: '$2~/executable/{print $1}'

2桌面 右键 更改桌面背景,我的图形界面是这样gnome

3chmod +x info

4mount /dev/设备名(比如sda2) /mnt/(你的挂载目录)

cd /mnt/

exit

umount /dev/设备名

5mkdir tmpdir

mv tmpdir /移动位置

cp -r /移动位置/tmpdir /移动位置2

mv /移动位置2/tmpdir /移动位置2/tmpdir2 (改名字)

rm -rf /移动位置2/tmpdir2

6

7#!/bin/bash

for i in `seq 1 5`

do

echo $i$i |bc

done

8?

9?

11useradd someone

groupadd somegrp

userdel someone

groupdel somegrp

12 vi somefile (建立)

输入冒号 wq 保存退出 模式是指esc 冒号下边有命令行 和i 插入或者替换编辑这三个模式么,不清楚

13echo 2\(3+4\) |bc

14

#!/bin/bash

flag=`ls -l yourfile |grep ^c`

if [ -n "$flag" ] ;then

cp yourfile /dev

fi

15

for i in `seq 4`

do

mkdir /m$i

mv m$itxt /m$i

done

16

#!/bin/bash

echo "Please input your commond"

read commond

case $commond in

start)myfile start;;

stop) myfile stop;;

status)myfile status;;

)echo "EXIT";exit;;

esac

以上就是关于Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本全部的内容,包括:Linux下用shell获取指定文件的最后修改时间并与系统时间比对,如果相差时间超过3分钟则执行另一个脚本、Shell脚本常用命令、linux shell 问题2等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9687853.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存