全部博文(842)
分类: LINUX
2012-03-18 10:48:09
在运行一个耗资源的find命令时 多数人喜欢在后台执行
find命令的一般形式为:
find pathname -options [-print -exec -ok]
pathname fina命令所查找的目录路径 . 表示当前目录, / 表示系统根目录
-print find命令将匹配的文件输出到标准输出
-exec find命令对匹配的文件执行该参数所给出的shell命令 相应的命令格式为:'command' {} \;
-ok 和-exec的作用相同,以一种更为安全的模式来执行该参数所给出的shell命令 在执行每一个命令之前,会给出提示
让用户来确定是否执行
2.1 find命令选项
-name 按照文件名查找文件
-perm 按照文件权限查找文件
-prune 这一选项可以使find命令不再当前指定的目录中查找 如果荣是使用了-depth选项 那么-prune选择将被find命令忽略
-user 按照文件属主来查找文件
-group 按照文件所在属主的组来查找文件
-mtime -n +n 按照文件更改日期来查找文件 -n 表示文件更改时间距现在n天以内。+n 表示文件更改时间距现在n天以前
-nogroup 查找无有效属主的文件,即该文件所属的组在/etc/groups中不存在
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-newer file1 ! file2 查找更改时间比文件file1新但比file2旧的文件
-type 查找某一类型的文件 如:b-块设备文件 d-目录文件 c-字符设备文件 p-管道文件 l-符号文件 f-普通文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-depth 查找此文件时,首先查找当前目录中的文件,然后再在其子目录中查找
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到
该配置文件中包含了本系统中有关文件系统的信息
-mount 在查找文件时不跨越文件系统mount点
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁盘设备中
示例:
1. name:按文件名(find pathname -options [-print -exec -ok])
name是find命令最常用的选项,匹配文件时记住要用引号将文件名模式引起来
不管当前路径是什么 如果想要在自己的跟目录$HOME中查找文件名符合*.txt的文件 使用~作为'pathname'参数 ~代表了你的$HOME目录
# find ~ -name "*.txt" -print
查找当前目录及子目录中所以*.txt文件 和 以一个大写字母开头的*txt文件 和以大写字母R开头的所以*.txt 和 以小写字母r开头的所*.txt
# find . -name "*.txt" -print
#find . -name "[A-Z]*.txt" -print
#find . -name "R*.txt" -print
#find . -name "r*.txt" -print
查找$HOME中的所有文件
#find ~ -name "*" -print
想查找第一位是一个大写字母 第二位是一个小写字母 第三位是一位是数字 组成的.txt 文件
例如:Cs3.txt
#find / -name "[A-Z][a-z][0-9]*.txt" -print
2. perm:按权限(find pathname -options [-print -exec -ok])
在当前目录查找文件权限位为777的文件 即所有用户都可读,写,执行
#find . -perm 777 -print
查找当前目录下 所有用户 可读,写,执行(007 文件属主 同组有户权限位为 0 0 所有用户可rwx 为7)的文件
#find . -perm -007 -print
3. prune:忽略某个目录(find pathname -options [-print -exec -ok])
如果希望在根目录的var中查找某个文件 但是不希望在var目录中的ftp目录中查找 可使用以下命令
# find /var -name "/var/ftp" -prune -o -print
4.user 和 nouser 按照文件属主来查找文件
如果按照文件属主查找文件,可以给出相应的用户名
在pub中查找属主为root的文件
# find /var/ftp/pub -user root -print
查找根目录下属主帐户被删除的文件 在使用-nouser是不需知道用户名
#find /home -nouser -print
5. group 和 nogroup 用法和user nouser一样
#find /var/ftp/pub -group root -print
#find /home -nogroup -print
6.mtime
在var目录下查找更改时间在5日内的文件
#find /var -mtime -5 -print
在var目录下查找更改时间在2日之前的文件
#find /var -mtime +2 -print
7.newer
下面命令查找在当前目录中 比 syslog.conf 新但比 yp.conf旧的文件
# find . -newer syslog.conf ! -newer yp.conf -exec ls -l {} \;
假如有一文件aaa.txt 创建时间时 05-24 16:13 aaa.txt 那么使用以下命令可查找 16:13 到系统当前时间内更改的文件
#find . -newer aaa.txt -exec ls -l {} \;
如果要查找一小时以内更改过的文件 那么需要创建一个距系统时间前一个小时的文件
例如系统现在时间是6:00 那么需要创建一个文件(agotime.txt)的时间是5:00 的文件 在使用如下命令即可查找出1小时以内更改过的文件
#find . -newer agotime.txt -exec ls -l {} \;
8. type
查找etc下的所有符号链接(l)文件
#find /etc -type l -exec ls -l {} \;
查找etc下的所有非符号链接(l)文件
#find /etc ! -type l -exec ls -l {} \;
查找etc下的所有目录
# find /etc -type d -print
9.size
使用size查找文件 文件长度既可以是块也可以是以字节来计量。以字节计量文件长度的表达式为Nc ,块计量只用数字即可
在$HOME目录中查找文件长度大于1000字节的文件
# find ~ -size +1000c -print
在$HOME目录中查找文件等于于1000字节的文件
# find ~ -size 1000c -print
在$HOME目录中查找文件大于10快(1块等于512字节)的的文件
# find ~ -size +10 -print
10 使用exec或ok来执行shell
-exec
在根目录查找所以txt文件 并删除它们
#find / -name "*.txt" -exec rm {} \;
-ok
在根目录查找所以txt文件 并删除它们
#find / -name "*.txt" -ok rm {} \;
< rm ... /t.txt > ?
输入y执行rm命令