find 命令
总结自《LINUX与UNIX SHELL编程指南》
概述
查找具体某一特征的文件(文件权限,文件属性,文件长度文件类型等)
命令格式
find pathname -options [-print -exec -ok]
# pathname所要查找目录的路径
# -print输出到标准输出
# -exec 'command'{} \ find命令对匹配的像一个文件执行shell虽给出的command(命令)
find . type -f -exec ls -l {} \;
# -ok与-exec相似只不过会在执行命令钱给出一个提示,让用户来确定是否要执行
find . -name "*.LoG" -mtime +5 -ok rm {} \;
选项-option
- -name,按照文件名,支持模式匹配
- -perm mode,按照权限,mode是绝对模式下的八进制数
- -prune 使find不在当前指定的目录中查找(指出要忽略查找的目录),存在-depth时被忽略
find /apps -name "/apps/bin" -prune -o -print
# 在/apps目录下查找文件,但不希望在/apps/bin目录下查找
- -depth 首先查找当前目录中的文件,然后再在其子目录中查找
- -usr 根据文件属主
- -group 根据文件所属的组
- -mtime -n更改时间n天以内的文件 +n更改时间n天以前的文件
- -nogroup 查找无有效组的文件
- -nouser 查找无有效属主的文件
- -newer file1 ! file2 查找更新时间比file1新但是比file2旧的文件
- -type 按照类型
- b 块设备文件
- d 目录
- c 字符设备文件
- p 管道文件
- l 符号连接文件
- f 普通文件
# 为了在当前目录下查找除目录以外的所有类型的文件
find . ! -type d -print
- -size n[c] 查找长度为n块的文件,带有c时表示长度以字节计数
- -fstype 查找位于某一文件系统中的文件,这些文件配置类型通常可以在/etc/fstab中找到,该文件中包含了本系统中有关文件系统的信息
- -follow 如果find命令遇到符号连接文件时,就跟踪至连接所指向的文件
- -cpio 对匹配的文件使用cpio命令,将这些文件备份到磁盘设备中
xargs与find的使用
xargs命令的意义
- Find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
- xargs命令则只有一个进程。
- 在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
例子
# 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
find / -type f -print | xargs file
# 在整个系统中查找内存信息转储文件 (core dump),然后把结果保存到 /tmp/core.log 文件中
find . -name "core" -print | xargs echo "" >/tmp/core.log
# 在/apps/audit目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限
find /apps/audit -perm -7 -print | xargs chmod o-w
# 用grep命令在所有的普通文件中搜索device这个词
find / -type f -print | xargs grep "device"
# 用grep命令在当前目录下的所有普通文件中搜索DBO这个词
find . -name "*" -type f -print | xargs grep "DBO"