然后行使“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

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