文件处理
来源:互联网 发布:绝地求生透视辅助源码 编辑:程序博客网 时间:2024/05/01 10:55
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 -1birthday
-rw-rrr-r-- 1 Jones devel 0 Jul 4 1976birthday
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 rootroot 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 rootroot 288604 7月 2 23:00tcsh
6.单独变更"修改时间"
[root@local~]#touch-mt 200206302300 tcsh
[root@local~]#ls -l
total 288
-rwxr-xr-x 1 rootroot 288604 6月 30 23:00tcsh
2. $$变量
共享的目录或同一程序的多个执行实例,都可能造成文件名冲突。在Shell脚本里的传统做法是使用进程ID,可以在Shell变量事$$中取得,构建成临时性文件的一部分。要解决完整临时性文件名发生此问题的可能性,可使用环境变量覆盖目录称,通常是TMPDIR。另外,你应该使用trap命令,要求在工作完成时删除临时性件。因此,常见的5he11脚本起始如下:
umask 077 #删除用户以外其他人的所有访问权
TMPFILE=${TMPDIR-/tmp}/myprog.$$ #产生临时性文件名
trap ' rm-f $TMPFILE' EXTT #完成时删除临时性文件
3. 比较文件
3.1. cmp命令
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, line1 #输出结果指出第一个不同处的位置
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
1c1
<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,所以必须减去一层目录。
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 文件处理
- 简单的sql数据库触发器实例
- asp.net 导出Excel/Word
- 【解惑】什么样的项目经历会让面试官眼前一亮
- 关于100%CPU(三)
- fedora10 与宿主机设置共享文件(VMware workstation 7.0.1)
- 文件处理
- 【解惑】关于对日外包
- 转载他人的关于interfece和abstract class的区别
- 对网上清理系统垃圾的批处理说两句
- Linux下GCC编译的四个过程
- LINUX 安装JRE的详细介绍
- 各种Hash函数和代码
- C#四种排序算法
- 进制转换