文件处理

1. 使用touch 更新修改时间

使用touch 命令更新修改时间,如下:

[root@local~]#touch    some-file

使用touch 建立空文件: 它们的存在与时间戮是有意义的,但它们的内容则否。最常见的例子是用于锁定文件,以指出程序已在执行中,不应启动第二个实例(instance)

使用touch 记录文件的时间戳,供日后与其他文件对照用。

1.1. touch 命令

1.2.1 . 语法与参数

语法

touch [OPTION]... FILE...

touch [-acm] MMDDhhmm[YY] FILE... (obsolescent)

用途

该命令可以同时或单独变更档案的两种时间纪录,读取时间(access time) 以及修改时间(modification time)

主要选项

- a 更改文件的读取时间(access time)

-c, --no-create 不建立任何新档案不建立任何新档案

-m 更改文件的修改时间(modification time)

-t STAMP 设定" 特定时间" 来代替" 目前时间" ,格式 [[CC]YY]MMDDhhmm[.ss]

-r 复制参照文件的时间戳

1.2.2 例子

1. 建立空档案

[root@local~]# touch file-touch1

[root@local~]# ls -l

total 0

-rw-r--r-- 1 root root 0 7 9 13:53 file-touch1

2. 如果不想建立空档案,就是用-c 选项

[root@local~]# touch -c file-touch2

touch: setting times of `file-touch2': 没有此一档案或目录 

3. 复制参照文件的时间戳

[root@local~]#touch -r US-bicentennial birthday

[root@local~]#1s -1 birthday

-rw-rrr-r--  1 Jones devel 0 Jul  4  1976 birthday

4. 打算将档案时间变更为 2002 年 7 1 8 00 01

[root@local~]#touch -t 200207010800.01 tcsh

[root@local~]#ls --full-time

total 288

-rwxr-xr-x 1 root root 288604 周一 7 01 08:00:01 2002 tcsh

5. 单独变更" 读取时间"

[root@local~]#touch -at 200207022300 tcsh

[root@local~]#ls -lu

total 288

-rwxr-xr-x 1 root root 288604 7 2 23:00 tcsh

6. 单独变更" 修改时间"

[root@local~]#touch -mt 200206302300 tcsh

[root@local~]#ls -l

total 288

-rwxr-xr-x 1 root root 288604 6 30 23:00 tcsh

2. $$ 变量

共享的目录或同一程序的多个执行实例,都可能造成文件名冲突。在 Shell 脚本里的传统做法是使用进程 ID ,可以在 Shell 变量事 $$ 中取得 ,构建成临时性文件的一部分。要解决完整临时性文件名发生此问题的可能性,可使用环境变量覆盖目录称,通常是 TMPDIR 。另外,你应该使用 trap 命令,要求在工作完成时删除临时性件。因此,常见的 5he11 脚本起始如下 :

umask 077                                 # 删除用户以外其他人的所有访问权

TMPFILE=${TMPDIR-/tmp}/myprog.$$    # 产生临时性文件名

trap ' rm-f $TMPFILE' EXTT              # 完成时删除临时性文件

3. 比较文件

3.1. c mp 命令

3.1.1 . 语法与参数

语法

    cmp [-clsv][-i < 字符数目 >] [ 第一个文件 ][ 第二个文件 ]

用途

    比较两个文件是否有差异。

主要选项

-c  除了标明差异处的十进制字码外,一并显示该字符所对应字符。

-i< 字符数目 >  指定一个数目。

-l --verbose  标示出所有不一样的地方。

-s --quiet --silent  不显示错误信息。

补充说明:

当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为 "-" ,则 cmp 指令会从标准输入设备读取数据。

3.1.2 . 例子

比较两个不同的文件

[root@local~]# cmp /bin/cp /bin/ls

/bin/cp /bin/ls differ: char 27, line 1   # 输出结果指出第一个不同处的位置

3.2. diff 命令

3.2.1 . 语法与参数

语法

    diff [ 选项 ] 源文件 目标文件

用途

    找出两个文件的不同点。

主要选项

-a 所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件。

-b| -w 忽略空格引起的变化。

-B 忽略插入删除空行引起的变化。

-d 改变算法也许发现变化的一个更小的集合。这会使 diff 变慢 ( 有时更慢)

--expand-tabs 在输出时扩展 tab 为空格,保护输入文件的 tab 对齐方式。

-i| --ignore-case 忽略大小写。

-N --new-file 在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件。

-P 在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件。

--paginate 产生通过 pr 编码的输出。

-q 仅报告文件是否相异 , 不报告详细的差异。

-r | --recursive 当比较目录时,递归比较任何找到的子目录。

-t 在输出时扩展 tab 为空格,保护输入文件的 tab 对齐方式

-u 使用统一的输出格式。

3.2.2 . 例子

[root@local~]# echo test 1 > test.l

[root@local~]# echo test 2 > test.l

[root@local~]# diff test.1 test.2

1c 1

<test 1

---

>test 2

注意:使用 diff 的惯例是 : 将旧文件作为第一个参数。不同的行会以前置左角括号的方式,对应到左边的 ( 第一个 ) 文件,而前置右角括号则指的是右边的 ( 第二个 ) 文件。最前面的 lcl 为输入文件行编号的简洁表示方式,指出不同之处以及需要编辑的操作 : 在这里, C 表示改变 (change) 。在大一点的例子下,你还可能发现 a 是增加 (add) ,与 d 是删除 (delete) 之意。

3.3. pacth 命令

patch 工具程序可利用 diff 的输出,结合原始文件,以重建另一个文件。

3.3.1 . 语法与参数

语法

patch [options][option <value] [-p < 剥离层级>] < [ 修补文件]

用途

    patch 指令让用户利用设置修补文件的方式,修改,更新原始文件。

主要选项

-p|--strip=< 剥离层级>  设置欲剥离几层路径名称。

3.3.2 . 例子

1. 更新文件

[root@local~]# diff -c test.1 test.2.> test.dif   # 将相异处的相关内文,存储到 test.dif

[root@local~]# patch< test.dif              # 应用不同之处

patching file test.1

[root@local~]# cat test.l                   # 显示修补后 (patched) test.1

test 2

2. 更新目录

[root@local~]# mkdir /tmp/old; cp /etc/passwd /tmp/old  

[root@local~]# mkdir /tmp/new; cp /tmp/test/passwd /tmp/new

[root@local~]# cd /tmp; diff –Naur old/ new/ > test.patch

[root@local~]# cd /tmp/old

[root@local~]# patch –p1 < /tmp/ test.patch

patching file passwd

注意:使用 head –n 1 //tmp/ test.patch 查看第一行内容如下:

diff –Naur old/passwd new/passwd

而我们升级所在的目录是 old ,所以必须减去一层目录。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值