该部分讲述的是shell编程方面的知识,以Bourne Shell为主,因为它是使用最广泛的,因而移植性最好,虽然功能不如现代许多其他版本的shell强大。
篇幅不大,只是一个简明手册,不具备系统性。
1.文件名生成通配符
在shell中,有两种类型的通配符:文件名生成通配符和正则表达式通配符。两者是不同的,注意区分。
字符*
星号*匹配文件名中的任何字符串。
字符?
?匹配文件名中的任何单个字符。
[…]和[!…]
使用[…]匹配方括号中的任何字符。可以使用一个横杠来连接两个字母或数字,表示一个范围。
使用[!…]表示非的意思。
2.正则表达式通配符
(1).基本元字符集
元字符 含义
^ 只匹配行首,在[]中表示否定
$ 只匹配行尾
* 一个单字符后紧跟*,匹配0个或多个此字符
[] 匹配[]内字符,可以是一个单字符,也可以是字符序列,可以使用-表示范围
\ 用来屏蔽一个元字符的特殊含义
. 匹配任意单字符
pattern\{n\} 用来匹配前面pattern出现次数,n为次数
pattern\{n, \} 含义同上,但次数最少为n
pattern\{n, m\} 含义同上,但次数在n与m之间
(2).\屏蔽的特殊字符
$ . ‘ “ * [ ] ^ \ + ?
(3).例子
^$ 匹配空行
[A-Za-z] 匹配所有字母
[A-Za-z]* 匹配所有单词
[^A-Za-z] 匹配任一非字母型字符
A\{2, \} 匹配AAB、AAAB、…
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} 匹配dd-mm-yyyy
3.find命令
(1).find命令的形式:
find pathname -optino [ -pirnt -exec -ok ]
pahtname:查找的目录路径;
-print:将匹配的文件输出到标准输出;
-exec:对匹配的文件执行给出的shell命令,命令形式为‘command {} \;’,注意空格;
-ok:与-exec类似,在执行前会让用户确认。
(2).-name
按照文件名查找文件。
例:
查找$HOME目录及子目录下所有.txt文件:
find ~ -name "*.txt" -print
查找当前目录及子目录下以一个大写字母开头的文件:
find . -name "[A-Z]*" -print
查找/etc及子目录下以host开头的文件:
find /etc -name "host*" -print
查找$HOME目录及子目录下文件:
find ~ -name "*" -print或find . -print
查找当前目录及子目录下以两个小写字母打头,后跟两个数字,最后是.txt后缀的文件:
find . -name "[a-z][a-z][0-9][0-9].txt" -print
(3).-perm
按照权限查找。
例:
查找当前目录及子目录下权限为755的文件:
find . -perm 755 -print
查找当前目录及子目录下所有用户都可读、写、执行的文件(使用八进制数字前要加-):
find . -perm -007 -print
(4).-prune
忽略某个目录,如果同时使用了-depth,则-prune被忽略。
例:
find /apps -name "/apps/bin" -prune -o -print
(5).-user和-nouser
-user:按照文件属主查找;
-nouser:查找文件属主帐户已经被删除的文件。
例:
查找属主为duan的文件:
find ~ -user duan -print
查找文件属主帐户已经被删除的文件
find /home -nouser -print
(6).-group和-nogroup
-group:按照文件所属的组查找;
-nogroup:查找属于不存在的组的文件。
例:
查找属于用户组informix的文件
find /apps -group informix -print查找不存在组的文件:
find / -nogroup -print
(7).-mtime
按更改时间查找,减号-限定更改时间距今n日内的文件,加号+限定更改时间距今n日外的文件。
例:
查找更改时间在5日内的文件:
find . -mtime -5 -print
查找更改时间在3日前的文件:
find . -mtime +3 -print
(8).-newer
查找更改时间新的文件,可以使用!逻辑非。
例:
查找比haha.txt新的文件:
find . -newer haha.txt
查找比haha.txt新但比find.txt旧的文件:
find . -newer haha.txt ! -newer find.txt -print
(9).-type
按类型查找。类型有:
b,块设备文件;
d:目录;
c:字符设备文件;
p:管道文件;
l:符号链接文件;
f:普通文件。
例:
查找目录文件:
find /etc -type d -print
查找非目录文件:
find . ! -type d -print
查找符号联接文件:
find /etc -type l -print
(10).-size
按照文件大小查找。单位是块,也可以是字节(后跟c)。
例:
查找字节大于1M的文件:
find . -size +1000000c -print
查找字节为100的文件:
find . -size 100c -print
查找大小大于10块的文件:
find . -size +10 -print
查找字节小于10的文件:
find . -size -10c -print
(11).-depth
先匹配所有文件,再在子目录中查找。
例:
先匹配当前目录中所有.txt文件,再在子目录中找:
find . -name "*.txt" -depth -print
(12).-mount
只在当前文件系统中查找,不进入其他文件系统。
例:
find . -name "*.txt" -mount -print
(13).-cpio
使用cpio命令将文件备份到磁带上。
例:
find etc home apps -depth -print -cpio /dev/rmt0
(14).-exec和-ok
对匹配的文件执行某操作。
例:
find logs -type f -mtime +5 -exec rm {} \;
find . -name "*.log" -mtime +5 -ok rm {} \;
find /etc -name "passwd*" -exec grep "rounder" {} \;
(15).和xargs结合使用
find . -name "*.txt -print xargx file
find . -name "*.txt" -print xagrs echo >/tmp/tmpfile
find . -perm -7 -print xargs chmod o-w
find . -type f -print xargs grep "device"
find . -name \* -type f -print xargs grep "DBO"
本篇文章来源于 中间件技术社区(http://middleware123.com) 原文链接:http://middleware123.com/tuxedo/intro/290.html