一、使用find和xargs
find pathname -options [-print -exec -ok]
pathname find命令所查找的目录路径    .表示当前目录,/表示根目录
-print find 命令将匹配的文件输出到标准输出
-exec find命令对匹配的文件执行该参数所的shell命令。相应命令的形式为'commang'{} \;注意{}和\之间的空格
-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,
都会给出提示,让用户来确定是否执行。

find 命令选项
-name 按照文件名查找文件
-perm 按照文件权限来查找文件
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了-depth,那么-prune将被find命令忽

-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以
前.find命令还有-atime和ctime选项,但它们都和-mtime选项相似

-mtime选项
-nogroup  查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-newer file1!file2查找更改时间比文件file1新但比文件file2旧的文件

-type 查找某一类型的文件,诸如:
b  块设备文件 d  目录  p 管道文件  l  符号链接文件  f  普通文件

-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
-fstype  查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件
中包含了本系统中有关文件系统的信息
-mount 在查找文件时,不跨越文件系统mount点
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中

使用name选项
find ~ -name "*.txt" -print   在根目录$HOME中查找文件名符合*.txt的文件~代表了你的确良$HOME目录
find . -name "[A-Z]*" -print  .表示当前目录及子目录 查找文件名以一个大写字母开头的文件
find . -name"[a-z][a-z][0-9][0-9].txt" -print 查找文件名以两小写字母开头,跟着是两个数字,最后是*.txt
使用perm选项
find . -perm 755 -print
find . -perm -007  查找所有用户都可读、写、执行的文件,在八进制数字前面加一个横杠
使用-prune忽略某个目录(注意使用该命令时如同时使用了-depth选项,那么该命令忽略)
find /apps -name "/apps/bin" -prune -o -print 希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找
find ~ -user dave -print 按照属主查找文件
find /etc -user uucp -print
-nouser 查找属主帐户已经被删除的文件
find /home -nouser -print
group和nogroup
find /apps -group accts -print 查找属于accts用户组的文件
$find / -nogroup -print  查找没有有效所属用户组的文件
如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,可用mtime选项来查找这样的文件
find / -mtime -5 -print 查找更改时间在5日以内的文件
find /var/adm -mtime +3 -print  在目录下查找更改时间在3天以前的文件
-newer查找更改时间比某个文件新但比另一个文件旧的所有文件
newest_file_name ! oldest_file_name
find . -newer age.qwk ! -newer belts.awk -exec ls -l {} \;查找更改时间比age.awk新但比belts.awk旧的文件
查找更改时间在两个小时以内的文件   假设现在是五月四日23:40
touch -t 05042140 dstamp
find . -newer dstamp -print
type选项
find /etc -type d -print 在/etc目录下查找所有所有的目录
find . ! -type d -print 在当前目录下查找除目录以外的所有类型的文件
find /etc -type l -print 在/etc目录下查找所有的符号链接文件
size选项按照文件长度来查找文件,文件长度可用块(block),也可用字节来计量,字节来计量表达形式为Nc以块只用
数字表示即可
find . -size +1000000c -print 查找文件长度大于1M字节的文件
find /home/apache -size 100c -print 查找文件长度恰好为100字节的文件
find . -size +10 -print 查找长度超过10块的文件(一块等于512字节)
depth选项
希望先查找所有的文件,再在子目录中查找,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件
,其次再备份子上当中的文件
find / -name "con.file" -depth -print 查找一个名为con.file,它将首先匹配所有的文件然后再进入子目录中查

mount选项
find . -name "*.XC" -mount -print 查找文件(不进入其他文件系统),从当前目录开始查找位于本文件系统中文件名
以XC结尾的文件
cpio选项
cpio命令可以用来向磁带设备备份文件或从中恢复文件.
备份/etc、/home和/apps目录中的文件
cd /
find etc home apps -depth -print|cpio -ivcdC65536 -o \
/dev/rmt0第一行末尾的\告诉shell命令还未结束,忽略\后面的回车
如果在备份时使用了绝对路径,如etc 为/etc,那么在恢复时,就只能恢复到/etc原始目录中去,cpio使用了c65536选项,
块的大小变成了64k字节(65536/1024)如使用B选项,块的大小只有512字节
exec或ok来执行shell命令
find . -type f -exec ls -l {} \;
find logs -type f -mtime +5 -exec rm {} \;
find . -name "*.LOG" -mtime +5 -ok rm {} \;
<rm ... ./nets.LOG> ? y 按y键删除文件,按n键不删除
find /etc -name "passwd*" -exec grep "rounder" {} \; 首先匹配所有文件名为"passwd*"文件,然后执行grep查看
这些文件中是否存在一个rounder用户
匹配$HOME目录下的所有文件,方法:
find $HOME -print
find ~ -print
find . -type f -perm 4755 -print 查找suid置位...
find / -type f -size 0 -exec ls -l {} \; 查找系统中所有长度为0的普通文件,并列出它们的完整路径
find / var/logs -type f -mtime +7 -exec rm {} \; 查找/var/logs目录中更改时间在7日以内的普通文件并删除
find / -name -group audit -print  查找系统中所有属于audit组的文件
find . -type d -print d -print -local -mount | sort 查找当前文件系统中的所有目录并排序
find /dev/rmt -print 查找系统中所有的rmt磁带设备
xargs
有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误,错误信息通常为"
参数列太长"或"参数列溢出"这时候就用到xargs命令
查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件:
find / -type f -print | xargs file
在整个系统中查找内存信息转储文件(core dump),然后把结果保存到/tmp/core.log文件中:
find . -name "core" -print|xargs echo " " >/tmp/core.log
在/ a p p s / a u d i t目录下查找所有用户具有读、写和执行权限的文件,并收回相应
的写权限:
$ find /apps/audit -perm -7 -print | xargs chmod o-w
在下面的例子中,我们用g r e p命令在所有的普通文件中搜索d e v i c e这个词:
$ find / -type f -print | xargs grep "device"
在下面的例子中,我们用g r e p命令在当前目录下的所有普通文件中搜索D B O这个词:
$ find . -name *\-type f -print | xargs grep "DBO"
注意,在上面的例子中, \用来取消f i n d命令中的*在s h e l l中的特殊含义。