然后使用“ls”命令列出所有文件和它的修改时间,可将其输出到另一个程序,如sed,以帮助我们稍后清理这个输入。
- ls –l
通常会出现下面的显示结果:
- -rw-r--r-- 1 user user 0 Jan 1 2017 file
为了保存时间戳,我们只需要年、月、日及文件名,下面命令可以清除“Jan”之前的信息:
- ls -l file | sed 's/^.*Jan/Jan/p'
这样显示的就是我们程序需要的信息,只是需要修改月份格式为数字格式:
- ls -l file | sed 's/^.*Jan/01/p'
将所有月份都替换为数字:
- ls -l | sed -n 's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;'
在一个文件夹中运行我们会看到如下图所示的结果:

然后将输出结果通过“>>”发送到名为“timestamps”的文件中:
- do echo $x | ls -l | sed -n 's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;' >> timestamps
至此,脚本的前两个操作就完成了,显示结果如下图:

下面可用“-s”标示测试脚本,用cat检查保存的信息:
- ./timestamps.sh –s
-
- cat timestamps

步骤五:恢复文件的时间戳
在保存好原始时间戳后,需要恢复时间戳让别人觉察不到文件被修改过,可使用下面命令:
- if $1 = "-r" ; then
- fi
然后使用下面命令,转发文本文件的内容,并一行一行运行:
- cat timestamps |while read line
- do
- done
然后再分配一些变量让文件数据的使用更简单:
- MONTH=$(echo $line | cut -f1 -d );
- DAY=$(echo $line| cut -f2 -d );
- FILENAME=$(echo $line | cut -f4 -d );
- YEAR=$(echo $line | cut -f3 -d )
虽然这四个变量在保存的时间戳文件中是一致的,但是如果时间戳是在过去一年中发生的,它只会显示时间而不是年份。如果需要确定当前年份,我们可以分配为写脚本的年份,也可以从系统中返回年份,使用cal命令可以查看日历。

然后检索第一行,只让显示想要得年份信息:
- CURRENTYEAR=$(cal | head -1 | cut -f6- -d | sed 's/ //g')

定义了所有变量之后可以使用“if else”语句,根据格式化的日期更新文件的时间戳,使用touch语法:
- touch -d "2001-01-01 20:00:00" file
由于每个时间都包含冒号,因此可使用下面的“ifelse”语句完成操作,整体操作如下图所示:
- if [ $YEAR == *:* ]; then
- touch -d $CURRENTYEAR-$MONTH-$DAY $YEAR:00 $FILENAME;
- else
- touch -d ""$YEAR-$MONTH-$DAY"" $FILENAME;
- fi

步骤六:使用脚本
(编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|