Find命令的一般形式为find -pathname -options [-print -exce -ok]
name 选项
文件名可以是完整的文件名或者是文件名模式,如果是文件名模式的话,则必须用使用双引号。
文件名模式的匹配符与正达表达式有区别,它有4个:?匹配任意单个字符;*匹配任意字符串;[set]匹配set集中的任意字符,可以用范围表示,eg [a-z];[!set]匹配不在set集中的。eg:find . "*.txt" -print
perm选项
权限位与chmod在绝对模式下采用的方式一样。如果是用8进制表示,需要在前面加-。eg:find . -perm 007 -print 找出本目录下其它用户可读写执行的文件。如果用8进制则为find . -perm -007 -print
-prune忽略某个目录
没弄明白,不过好像加入了-o后会将除了要查找的结果以外的文件显示出来。eg: find . -name "*.c" -o -print 这样会给出本目录以子目录下所有不以.c结尾的文件。
user和nouser选项
-user代表按照属主进行查找,如果某个属主已经被删除,则可以用-nouser,它代表查找在/etc/passwd文件中没有有效帐户的文件。
group和nogroup (略)
按照更改时间查找
-amin -atime (-cmin,-ctime) 在指定的时间曾经被读存取过(更改)的或者创建的文件或目录,以分钟(24小时计,即n天)计。存取代表诸如使用了more等命令。文件的更改包括内容,权限等。"-"代表是给定的时间以内,"+"代表在给定的时间之前。eg: find . -amin -10 找出在最近十分钟内被读取过的文件。
关于-atime -ctime -mtime的区别
-atime使用于读取,-ctime用于改变,包括权限及内容,-mtime用于内容的改变。文件有个inode结点,记录了文件的某些信息,实验表示-ctime包括这些结点内容的改变。也就是说-mtime改变的其-ctime不一定改变,-mtime改变的其-ctime一定改变。只是更改而没读取的文件,用-ctime -mtime查不到,注意读取与更改的区别。
查找比某个文件新或旧的文件-newer
语法:find . -newer [newest_file_name] ![ oldest_file_name]查找比newest_file_name 旧比oldset_file_name新的文件,可以分开使用。如果想查找在用这个选项来查找在两个小时以内更改过的文件,而又没有一个恰好在两个小时前创建的文件,则可以先创建一个文件,然后用touch -t time file_name来改变它的创建时间。
type选项
前面讲了,文件类型共有七种类型。这里也可以用!取反。比如找出$HOME目录下的普通文件eg:find ~ ! -type f -print,这里f代表普通文件,注意与第一章中给出七种文件类型中的普通文件相区别。
size选项
可以用字节也可以用块来计量,用字节方式后面加c,块的话直接接数字即可,一块512字节。"+"-"号表示大于或者小于,如果此符号,此表示刚好等于:eg find . -size +2 -print 查找大于1M的文件。
depth选项
使用此命令会先匹配所有的文件,然后再在子目录中查找。
cpio选项
cpio命令可以用来向磁带设备备份文件或从中恢复文件。
使用exec或ok来执行shell命令
当匹配到一些文件后,可能会对其执行某些操作,这时就可以使用-exec选项或者-ok选项。
基本用法:exec选项后跟随着所要执行的命令,然后是一对{},一个空格和一个\,最后是一个分号。-exec与-ok的区别是,-ok是一种更安全的模式,比如在删除文件前,它会询问。eg: find . -name "*.c" -mtime +5 -exec rm {} \;或者find . -name "*.c" -mtime +5 -ok rm {} \;
xargs
在使用find命令时-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行,但是有的系统对能够传递给exec的命令长度有限,从而造成问题。可以用xargs命令来解决,它只产生一个进程,一次究竟是将所有参数全传过去,还是传一批会根据该命令的选项及系统内核中相应的可调参数来确定。eg: find . -perm -7 -print | xargs chmod o-w
阅读(997) | 评论(0) | 转发(0) |