文件管理 · 2022年7月29日

sh获得文件修改时间|linux shell 如何比较2个文件最后修改时间的大小

㈠ 求助shell:linux 如何指定时间点,然后从某文件夹中获取这时间之后生成的文件,复制到另个文件夹中

#!/bin/shshow_usage(){echo"Usage:backup.shsrc_folderbak_folderbak_date"echo""echo"src_folder-sourcefoldertobackup"echo"bak_folder-backupfolder"echo"bak_date-backupdateinYYYYMMDDformat"}if[$#-ne3];thenshow_usageexit1fisrc_folder="$1"bak_folder="$2"bak_date="$3"bak_file="$bak_folder/backup.tar"#这里把备份文件名固定为backup.tar了,你可以根据需要做些修改if[-f$bak_file];thenrm$bak_filefitmpfile="`mktemp`"touch-t${bak_date}0000$tmpfilecd$src_folderfind.-name"*.py"-newer$tmpfile-exectarrvf$bak_file{};rm$tmpfileecho"backupfile:$bak_file"ls-l$bak_file

备份时运行命令:

backup.sh/var/www/html/opt/backup20130515

㈡ linux查看和修改文件的时间

1、查看文件大小: # -sh filename2、查看文件,文件夹属性: #ls -l filename #ls -ld foldername3、查看文件的三个时间 atime ,ctime, mtime 3.1、 mtime(modification time),修改时间: 这个时间指的是文件内容修改的时间,而不是文件属性的修改,当数据内容修改时,这个时间就会改变,用命令ls -l默认显示的就是这个时间 3.2、ctime(status time ),状态时间:当一个文件的状态改变时,这个时间就会改变,例如更改了文件的权限与属性等,它就会改变。 3.3、atime(access time),访问时间:当读取文件内容时,就会更改这个时间,例如使用cat 去读取/etc/man.config,那么该文件的atime就会改变。 3.4、查看命令: # ls -l –full-time /etc/man.config mtime # ls -l –time=atime –full-time /etc/man.config atime # ls -l –time=ctime –full-time /etc/man.config ctime4、其他 如果要一起查看文件的三个时间情况,可以用命令stat进行查看 # stat /etc/man.config

㈢ 编写一个shell脚本,将自变量形式给出的目录下所有文件的文件名、大小和最后修改时间列出,并保存到文件中

#!/bin/shexport LANG=en_USls -l $1 |grep ^-|awk '{printf "%30s\t%s\t%s\n",$9, $5 ,$8}'

㈣ 如何在linux中使用shell脚本遍历指定目录的文件,将创建时间大于指定时间的文件,复制到指定目录下。

#!/bin/shDIR=$1TIME=$2OTDIR=$3TMP=`find$1-mtime+$2-print`echo$TMPcp$TMP$OTDIR执行时要有3个参数指定文件的目录大于指定的时间复制到的目录没写验内证部分参数顺序不要容写错

㈤ 求解!!! shell脚本: 要求 判断指定文件最后修改的日期是否是今天,或者判断n天之内是否被修改。。

#!/bin/sh# 备份天数BAK_DEL_DAYS=5# 指定的文件FILE_NAME=""# 备份日志所在的目录LOG_DIR=""FILE_NAME=`basename ${FILE_NAME}`DIR_NAME=`dirname ${FILE_NAME}` # 如果找到备份天以内修改的指定文件,认为需要删除备份日志。IsDelFlag=`find ${DIR_NAME} -name ${FILE_NAME} -mtime -${BAK_DEL_DAYS} | wc -l`if [ "${IsDelFlag}" == "1" ]then find ${LOG_DIR} -name * -mtime +${BAK_DEL_DAYS} -exec rm -rf {} \; echo "Delete backup log of ${BAK_DEL_DAYS} dayes ago."fi

㈥ Shell脚本获取系统时间 Linux程序

1,$HOME/getdate.sh,内容如下:版#!权/bin/bashDATE=/bin/date$DATE +"%F %T" >>$HOME/date_log.log2. $HOME/call_gd.sh,内容如下#!/bin/bashSH=/bin/sh${SH} $HOME/getdate.sh

㈦ 如何在shell中逐行打印文件的名字,大小,硬链接数,拥有者和最后修改日期

#!/bin/shfile=$1if [ -z $1 ];then echo usage $0 filename exit 1fiecho $fileecho ` -sh $file|awk '{print $1}'`echo `ls -l $file|awk '{print $3}'`echo `ls -l $file|awk '{print $2}'`echo `ls -l –time-style +%Y%m%d-%H:%M:%S $file|awk '{print $6 }'`

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

使用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 &#39{print $2}&#39 #这句获取了日期段,即上面例子里面的2013-02-21

stat myfilename | grep Modify | awk &#39{split($3,var,”.”);print var[1]}&#39 #这句获取了时间段,即上面例子里面的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 &#39{print $2}&#39`filetime=`stat tt.txt | grep Modify | awk &#39{split($3,var,”.”);print var[1]}&#39`file_datetime=`date -d “$filedate $filetime” +%stimedelta=`expr $current_datetime – $file_datetime`if [ “$timedelta” -gt “180” ];thenecho “match condition”fi

㈨ linux shell 如何比较2个文件最后修改时间的大小

仅攻参考#!/bin/bash – # 获取文件列表,并删除第一行的total *** filelist=`ls -lt –full-time $* | sed '1d'`time=()file=()#修改shell的字段分割符IFS=$'\n'for f in ${filelist}do#取出每行的文件名字段,放入数组file中 filename=`echo $f | awk '{printf("%s", $9);}'` file+=($filename)#取出每行的时间字段,转换成EPOCH秒数值(方便比较),放入数组time中 date_modified=`echo $f | awk '{printf("%s %s", $6, $7);}'` timestr=`date –date="$date_modified" +%s` time+=($timestr)done#取出数组中元素个数,即文件数#数组file和数组time中每个元素一一对应,即一个文件对应其修改时间值cnt=${#file[*]}for((i=0;i<$cnt-1;i++))do#如果前者的修改时间大于后者,则输出提示 if [ ${time[$i]} -gt ${time[$i+1]} ];then echo "Modification time: ${file[$i]} > ${file[$i+1]}" fidone

㈩ 用shell命令取得文件生成时间

# stat file File: ‘file’ Size: 3432 Blocks: 8 IO Block: 4096 regular fileDevice: 802h/2050d Inode: 8664565 Links: 1Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2017-08-05 14:05:44.985964897 +0800Modify: 2017-08-05 14:05:25.809965564 +0800Change: 2017-08-05 14:05:25.809965564 +0800 Birth: -文件的创建时间是不记录的,每次修改后,版都会权变成change# stat file|awk -F"[-:. ]+" '/Change/{print $2$3$4}'20170805