find - search for files in a directory hierarchy 查找文件
【语法】: find 【选项】 【参数】
【功能介绍】
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
【选项说明】
-maxdepth levels 设置最大目录层级;
Descend at most levels (a non-negative integer) levels of directories below the com-
mand line arguments. -maxdepth
4 means only apply the tests and actions to the command line arguments. -mindepth levels 设置最小目录层级;
Do not apply any tests or actions at levels less than levels (a non-negative integer).
-mindepth means process all files except the command line arguments. -name pattern 指定字符串作为寻找文件或目录的范本样式; -size 指定文件大小 -type c 指定文件类型 b block (buffered) special 字符设备
c character (unbuffered) special 字符串
d directory 目录
p named pipe (FIFO)
f regular file 普通文件
l symbolic link; this is never true if the -L option or the -follow option is in 符号连接
effect, unless the symbolic link is broken. If you want to search for symbolic
links when -L is in effect, use -xtype. -exec <执行指令>:假设find指令的回传值为True,就执行该指令;
--mtime 查找指定天数
!取反
【参数说明】
查找文件的起始目录
【经验技巧】
- find指令支持逻辑运算符与(and)、或(or)和非(not)组成的复合查询条件。现象“-a”为默认选项。逻辑与表示当所有给定的条件都满足时,符合查找条件;逻辑非表示查找与所给条件相反的文件。
- 通过find指令的“-exec” 选项可以通过外部Linux指令对找到的文件进行操作。如果找到的文件较多,有可能出现“参数太长”,或者“参数溢出”的错误。可以使用xargs指令每次制度取一部分查找到的文件,等处理完毕后再读取一部分查找的文件,一次类推,直到所有的文件都被处理完毕。
- 为了缩短find指令的执行时间,要尽量的缩小查找的其实目录。因为find指令使用递归方式遍历目录,所以其实目录范围较大,会导致find指令的运行过程过长。
- 不带任何选项和参数的find指令可以打印当前目录下的所有内容,包括所有子目录下的文件列表。
【实例】
实例1:删除当前目录下所有.txt文件
[root@cobbler6 ~]# find . -type f -name "*.txt"
./oldboy.txt
./luoahong/.txt
./test/e.txt
./test/b.txt
./test/a.txt
./test/c.txt
./test/d.txt
[root@cobbler6 ~]# find . -type f -name "*.txt"|xargs rm -f
[root@cobbler6 ~]# ll
total
drwxr-xr-x root root Nov : -
-rw-------. root root Oct : anaconda-ks.cfg
-rw-r--r--. root root Oct : install.log
-rw-r--r--. root root Oct : install.log.syslog
-rw-r--r-- root root Dec : luo1.tar.gz
drwxr-xr-x root root Dec : luoahong
-rw-r--r-- root root Nov : luo.conf
-rw-r--r-- root root Nov : nginx.conf
-rw-r--r-- root root Nov : oldboy---.tar.gz
drwxr-xr-x root root Nov : oldboydir
lrwxrwxrwx root root Nov : oldboydir_hard_link -> oldboydir
lrwxrwxrwx root root Nov : oldboydir_soft_link -> oldboydir
-rw-r--r-- root root Nov : oldboy.log
drwxr-xr-x root root Nov : p
drwxr-xr-x root root Dec : test
实例2:借助-exec选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户tom
find .-type f -user root -exec chown tom {} \;
上例中,{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。 找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。 查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec cat {} \;> all.txt
将30天前的.log文件移动到old目录中
find . -type f -mtime + -name "*.log" -exec cp {} old \;
实例3:删除7前以前的日志文件
[root@zabbix-agent log]# find ./ -type f -name "*.log" -mtime +|xargs rm -f
实例4:搜索大于10KB的文件
[root@zabbix-agent ~]# find . -type f -size +10k
实例5:搜索出深度距离当前目录至少2个子目录的所有文件
[root@zabbix-agent ~]# find . -mindepth -type f
实例6:向下最大深度限制为3
[root@zabbix-agent ~]# find . -maxdepth -type f