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

作者&投稿:谈虾 (若有异议请与网页底部的电邮联系)
linux shell 判断指定目录下文件或者文件夹最后修改时间是否大于三天~~

cd /home
for i in ` find ./ -mtime +3 `
do
rm -rf "$i"
done

大于指定时间?最简单的就是直接find里面指定吧。例如,查找当前目录及其子目录所有mtime大于1天的文件:
find /path -type f -mtime +1 即可,/path 可以换成其他路径,-mtime +1 表示时间大于1天。-1的话表示小于一天也就是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:05.404876407 +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 tt.txt | grep Modify | awk '{print $2}'`
filetime=`stat tt.txt | 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


想必你已经在chinaunix上找到答案了吧。
a=`stat -c %Y filename`;b=`date +%s`;if [ $[ $b - $a ] -gt 180 ];then command;else othercommand;fi就挺好的
但是你要注意在crontab中执行的时候需要加source一下环境变量,不然有些命令会找不到路径。
如:
0-59 * * * * . /etc/profile;a=`stat -c %Y filename`;b=`date +%s`;if [ $[ $b - $a ] -gt 180 ];then command;else othercommand;fi
. /etc/profile可以换成你用户目录下的配置文件.
C shell的为 .cshrc 在用户主目录下
bashell的为 .bashrc 在用户主目录下
kshell的为.profile 在用户主目录下

如下测试,请参考。
当前时间 10:22,创建三个文件 1.txt 2.txt 3.txt,上一层目录有脚本 test.sh,内容为简单输出所有参数。使用 find 实现你所要求的功能。
(如果你的脚本在别的地方,请在 find 语句中相应修改)

[seesea@UC find]$ date
2013年 05月 03日 星期五 10:22:28 CST

[seesea@UC find]$ ll
总计 8
-rw-rw-r-- 1 huangyd huangyd 4 05-03 10:15 1.txt
-rw-rw-r-- 1 huangyd huangyd 4 05-03 10:15 2.txt
-rw-rw-r-- 1 huangyd huangyd 0 05-03 10:22 3.txt

[seesea@UC find]$ cat ../test.sh
echo "Test script. Args: $*"

[seesea@UC find]$ find * -mmin +3 -exec ../test.sh {} \;
Test script. Args: 1.txt
Test script. Args: 2.txt


在linux中java web环境需要哪些配置文件
在linux中java web环境配置方法步骤如下:1、远程连接:a) Xsheel连接:跟一般ssh连接工具差不多,输入服务器IP及用户名密码等。b) Ssh连接:这里用的是filezilla,也可以用8uftp。注意:远程工具可以根据自己的喜好任意选择。附:如果中途连接时遇到连接不通时先重启服务再连接,注意防火墙。Ssh服务重启...

不过时的技术——Bash脚本
甚至Unix/Linux系统本身的很多功能,也是由Bash实现的。随意打开 \/etc\/init.d\/ 目录下的某个文件,会发现就是一个Bash脚本,在Linux中,存在这大量这样的脚本。上面的脚本看似复杂,但从结构上可以简单划分为四部分:1. 第一行 #! \/bin\/sh 叫 shebang ,标明这是一个Shell脚本。 2. 后面以...

linux shell编程的环境是什么啊,初次接触。比如JAVA用clise,那Shell在...
解释型语言,只有解释器,不用编译 另外eclipse只是java的一个IDE,不是java编译器或者java字节码解释器 linux有很多种类的shell,例如最常用的bash,语法和c很像的csh,甚至连python这样的脚本语言都可以作为linux的系统shell,如果想自己写脚本就用vi或者emacs什么的编辑器来写,直接用解释器执行就行 ...

linux下如何判断该文件是否是可执行程序
说某句不合语法啥的。如果这个文件就是设计用来执行的,比如你说的二进制和脚本文件,在代码没错的情况下,敲入命令后就会有预期的执行结果了。如果文件属性里有x,那么你可以“.\/filename”来运行。否则,用“sudo .\/filename”来执行。而且终端中用ls命令后,这类属性带x的会显示绿色。

Linux下sed命令使用全解析
-r:可以使用标准正则表达式。默认情况下sed只支持基本正则表达式,但是加上-r选项后则支持扩展正则表达式 -e:多脚本共用。可以同时执行多个命令。例如:代码如下:[root@localhost ~]# sed -e 's@@H1@g' -e 's@(l..e).@1r.@g' test He love His lover.She like Her liker.Dove love ...

学习linux操作系统需要掌握哪些东西?
学会用mount命令访问其他文件系统 了解vi,gcc,gdb等常用编辑器,编译器,调试器 学习linux环境下的简单组网 建议:买一本不需要太厚的linux教材,大致可以满足要求 \/\/现在的书越来越多了,还带很多图,我当时可没这么多书:)四.高级应用 澄清一些概念:linux的普通操作与真正的系统管理不能相提并论,...

翻译成中文
不只做了网景涉及多种作业系统的 s 浏览器,包括窗口和 Linux,它有了它自己的申请规画接口 (美国石油协会) 促成开发者写没有任何其他的操作 system.Moreover 涉及浏览器的顶端的软件,这软件在整个月台可能是可并立的,藉此除去一个网络外在性的主要来源。微软恐怕是数以百万计的买了低有定价的 web...

linux shell if语句中~是什么意思
linux环境中,~一般表示当前用户主目录,后面一般都接着写目录文件位置等等。 suxiaojack | 发布于2015-08-27 举报| 评论 0 22 当前用户的home目录 areshowl | 发布于2015-08-17 举报| 评论 0 1 在详细点你的问题。最好有插图。 热心网友| 发布于2012-10-22 举报| 评论(1) 2 0 其他1条...

linux文件导出命令linux导出命令
linux怎么复制文件到文件夹?答方法\/步骤如下 1 打开xshell软件连接上linux服务器。2 使用指令【cp文件目标文件夹】进行文件复制。3 如果在文件夹中已经有相同名字的文件,会提示是否覆盖。输入y回车确认。4 如果想要复制的时候强制覆盖不提示,则使用【cp文件目标文件夹】。5、复制文件夹需要使用参数-r...

争做黑客—学kali linux必须知道的四种网络攻击方法(DDoS、CC、ARP欺骗...
黑客之路:探索Kali Linux的四大网络攻击技术 作为一名黑客,我曾接下最具挑战的任务—黑入X网站服务器,而装备是成功的关键。此刻,我身披全黑紧身夜行衣,戴上墨镜,隐藏在暗夜的阴影中,准备用Kali Linux的尖刀,轻轻划开网络的防线。在这个黑客的世界里,策略与技巧并重,但我更倾向于低调行事。k...

伊宁市17779896577: Linux shell 中如何从路径名提取指定字符串 -
攸胃甘复: 这个不需要正则式效率差,难理解.使用两次shell 扩展就可以了.#!/bin/bash a="$1" a="${a##*-}"#从开头删除到顺数最后一个减号.a="${a%\.*}"#从结尾删除到倒数第一个小数点.echo "$a" 脚本保存为 a.sh 执行命令 ./a.sh “/home/...

伊宁市17779896577: linux Shell怎么查找指定文件,并进入该文件所在目录,目录有空格 -
攸胃甘复: 1.使用绝对路径执行的shell文件(如/home/xxx/binfile) 直接使用dirname $0即可 2.对于使用相对路径执行的shell文件(如 ./xxx/binfile) pwd与dirname结合使用;pwd获得的是执行当前shell文件时,用户所在的位置;dirname可以获得相对于...

伊宁市17779896577: 如何用shell获取linux目录下的文件名 -
攸胃甘复: 代码如下,假设你要获取"d:\"下的文件,只需将下面的foldername = "d:\"的"d:\"换为你要获取的目录就行了,另外filenames(100) 是存取文件名,要尽量大一些维数比你大文件多才行. private sub form_load() dim fname as string ...

伊宁市17779896577: Linux的shell脚本中如何获得指定目录下的文件名 -
攸胃甘复: 1234 #/bin/bash ls/home/user/test> txt echo"该目录中有文件"`head-1 txt` rm-rf txt

伊宁市17779896577: Linux中如何用shell脚本遍历指定目录下的文件 -
攸胃甘复: 可以使用ls或者find来完成对某个文件夹下所有文件的遍历 比如使用ls 可以简单地使用一个通配符来完成 ls 某个目录/* 也可以使用find来完成 比如 find 某个目录 自然的也可以写一个shell脚本来进行遍历 首先进行一个要遍历的文件夹 然后循环...

伊宁市17779896577: linux怎么通过shell查找到某一个文件的绝对路径 -
攸胃甘复: 查找某文件的绝对路径可以用whereis或者是locate命令(这两个命令的效果是一样的),这两个命令可以马上列出文件的绝对路径.whereis命令的用法非常简单,whereis 文件名即可,它有两个非常有用的选项:-b选项:只找二进制文件-s选项:只找源代码文件 locate命令的用法和whereis命令一样,不过它有一个-i选项,表示忽略文件名的大小写差异,比较有用.

伊宁市17779896577: 、在linux系统下,怎样编写shell脚本把当前目录下的文...... -
攸胃甘复: ls -l --time-style=full | awk '$6>"2011-09-13"&&$6="01"&&$7/dev/null 2>&1

伊宁市17779896577: Linux环境下shell脚本循环提取特定关键词之间的内容 -
攸胃甘复: awk 'BEGIN {key=1}/abc/,/cde/ {print $0> "key" key ".txt"} /cde/ {++key} ' txt文件名

伊宁市17779896577: linux shell 读取一个配置文件并获取其中的全部内容,急!!!!!!! -
攸胃甘复: 下面是读取配置文件,作为变量显示出来,实例如下:[lotto@ftptest2 ~]$ cat boot.ini path='/data/source' username='myuser' password='mypassword' [lotto@ftptest2 ~]$ cat test.sh#!/bin/sh eval `cat ./boot.ini` echo "$username" echo "$path" echo "$password" [lotto@ftptest2 ~]$ ./test.sh myuser/data/source mypassword

伊宁市17779896577: linux shell脚本怎么获取目录下所有txt文件名称 -
攸胃甘复: 执行如下三条命令即可:(1)、$script myresultfile (2)、$ls -al *.txt (3)、$exit 此时,该目录下的所有 txt 文件名称就会以长格式保存在 myresultfile 文件中了.然后你再使用 SHELL 编程的功能把那些无用的列去掉即可.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网