故名思议find命令的作用是查找文件。其格式如下:
find 路径 选项 参数;
其主要的几个选项如下:
根据文件名进行查找:-name
格式:find 路径 -name nameexpr
##查找/etc目录下的所有叫conf的文件或目录 [root@localhost /]# find /etc -name conf /etc/httpd/conf /etc/logwatch/conf [root@localhost /]#
name参数的值可以使用通配符:*代表任意字符,?代表一个字符。实例如下:
##通配符的使用 可以左右或者任意一边使用*号进行通配 [root@localhost /]# find /etc/java -name *.conf /etc/java/java.conf [root@localhost /]# ##??占位符通配 [root@localhost /]# find /etc -name ???.conf /etc/dbus-1/system.d/hal.conf /etc/gre.d/gre.conf
根据文件大小进行查找:-size
格式:find 目录 -size 大小;其中大小的单位是block即512bit,大小前面的+、- 分别代表 大于 小于 不写代表等于。
##根据文件的大小查找文件 [root@localhost /]# find /etc -size +4096 /etc/selinux/targeted/modules/active/base.pp /etc/selinux/targeted/modules/active/base.linked /etc/gconf/gconf.xml.defaults/%gconf-tree.xml [root@localhost /]#
根据所有者进行查找:-user
格式:find 路径 -user username;
##根据文件所有者查找文件 [root@localhost /]# find /home -user test /home/test/test.sh [root@localhost /]# ls -l /home/test 总计 0 -rwxrwxrwx 1 test test 0 07-22 21:55 test.sh ##文件的所有者就是test [root@localhost /]#
根据时间查找:
这个选项比较重要,其中所涉及的时间也比较多,如下:
- ctime、cmin 文件属性被修改的时间,time是天为单位,min是分钟为单位
- atime、amin 文件被访问的时间,time是天为单位,min是分钟为单位
- mtime、mmin 文件内容被修改的时间,time是天为单位,min是分钟为单位
实例如下:
格式:find 目录 -ctime +n ;+号表示之外,-号表示之内。看例子吧:
##根据时间查找文件 [root@localhost /]# find /etc -ctime -1 ##表示一天内修改了文件属性的文件 /etc /etc/aliases.db /etc/shadow- [root@localhost /]# find /etc -amin -1 ##一分钟内被访问过的文件 /etc/mtab /etc/nsswitch.conf /etc/sysconfig/networking/profiles/default/resolv.conf [root@localhost test]# find ./ -mmin -20 ##20分钟内更改过文件内容的文件 ./test.sh [root@localhost test]#
根据类型查找:-type
上面的操作中我们查到的结果有文件,目录,链接。因此我们可以根据type进行过滤。
- 格式:find 目录 -type typevalue。
- 格式l:表示链接文件。
- 格式f:表示文件。
- 格式d:表示目录。
实例如下:
##根据类型查找文件 [root@localhost test]# find /etc/fonts -type l ##查找为链接的文件 /etc/fonts/conf.d/80-delicious.conf /etc/fonts/conf.d/30-urw-aliases.conf
条件连接符:-a、 -o
- -a表示and,即与的关系
- -o表示或。
实例如下:
##查找文件名ini开头的目录 [root@localhost test]# find /etc -name ini* -a -type d /etc/rc.d/init.d [root@localhost test]# ##查找文件名为init或者init.d的文件 [root@localhost /]# find /etc -name init -o -name init.d /etc/rc.d/init.d /etc/init.d /etc/sysconfig/init [root@localhost /]#
二次操作连接执行:-exec、-ok
我们找到的文件要是进行二次操作应该怎么办呢,我们可以使用 -exec 或者-ok进行连接处理
- find ..... -exec 命令 {} \; 找到结果后对文件进行命令处理,且不进行询问。
- find ..... -ok 命令 {} \;找到结果后对文件进行命令处理,且进行询问。
如下实例:
##-exec 连接二次操作 [root@localhost home]# find ./ -name test.sh -exec ls -l {} \; ##找到后ls一下文件的属性 -rwxrwxrwx 1 test test 4 07-22 23:56 ./test/test.sh [root@localhost home]# ##-ok 连接二次操作 [root@localhost home]# find ./ -name test.sh -ok ls -l {} \; ##使用ok < ls ... ./test/test.sh > ? y ##此处对我们进行了询问 -rwxrwxrwx 1 test test 4 07-22 23:56 ./test/test.sh [root@localhost home]#
操作特殊文件:-inum
这里所说的特殊文件指的是文件名特殊,我们不方便输入的。比如有乱码、有特殊字符、不可见字符等。而我们要执行改名啊,删除啊,修改啊 等操作。
我们可以使用下面的两个命令进行结合:
- ls -i 文件名
- find -inum inode值 -exec 命令 {} \;
举例如下:
##目录下有一个比较怪的文件名的文件,我们要将其删除,直接用文件名肯定是比较费劲的。 [root@localhost test]# ls -l 总计 4 -rw-r--r-- 1 root root 0 07-23 00:16 file df dfd ~ i~ -rwxrwxrwx 1 test test 4 07-22 23:56 test.sh [root@localhost test]# ##使用ls -li 显示问价的inum值 [root@localhost test]# ls -li 总计 4 2107057 -rw-r--r-- 1 root root 0 07-23 00:16 file df dfd ~ i~ 2107044 -rwxrwxrwx 1 test test 4 07-22 23:56 test.sh [root@localhost test]# ##下面使用find命令删除 [root@localhost test]# find ./ -inum 2107057 -exec rm -f {} \; [root@localhost test]# ls -li 总计 4 2107044 -rwxrwxrwx 1 test test 4 07-22 23:56 test.sh