find工具主要用于文件、目录的查找,find命令使用语法格式如下:
find 路径 [选项] [ "文件名"] [-exec -ok command] '{}' \;
注意:文件名可以使用通配符、正则表达式来匹配,而且,文件名一定要用""括起来,不括起来有时候能正常执行,有效时候会报错,若果使用了大括号{},大括号也要用单引号括起来,免得被shell当做特殊字符转译了。
参数如下:
-name filename :搜索文件名包含filename的文件
-iname :按文件名查找并且忽略大小写
-type b|d|c|p|l|f :查找块设备、目录、字符设备、管道、软链接、普通文件
-empty :查找空文件或空目录
-uid n :搜索uid为n的文件
-size n|c :搜索大小为n块或c字节的文件
-perm :按权限查找
-atime n :搜索最近n天未访问的文件
-user username :搜索用户名为username的文件
-nouser :查找无有效属主的文件
-group groupname :按组名来查找
-nogroup :查找无有效组的文件
-mtime -n +n :按文件更改时间来查找,-n指n天以内,+n指n天以前
-atime -n +n :按文件访问时间来查找,-n指n天以内,+n指n天以前
-ctime -n +n :按文件创建时间来查找,-n指n天以内,+n指n天以前
-mmin -n +n :按文件更改时间来查找,-n指n分钟以内,+n指n分钟以前
-amin -n +n :按文件访问时间来查找,-n指n分钟以内,+n指n分钟以前
-cmin -n +n :按文件创建时间来查找,-n指n分钟以内,+n指n分钟以前
atime,access time :文件被读取、执行的时间
ctime,change time :文件状态改变时间
mtime,modify time :文件内容改变时间
注意:+有以前、大于的意思,-有示以内、小于的意思
-name 根据文件名查找
[root@Centos8 shell_scripy]# find ./ -name "*.sh" #使用通配符按文件名查找
[root@Centos8 shell_scripy]# find ./ -iname "test.txt" #根据文件名查找,不区分文件名大小写
[root@Centos8 shell_scripy]# find ./ -type d -name "test" #查找当前目录下的目录名为test的目录
[root@Centos8 shell_scripy]# find ./ -name "[A-Z]*" #查找当前目录下大写字母开头的文件
[root@Centos8 shell_scripy]# find ./ -name "*.??" #查找文件结尾是点号加两个字符的文件
-type 根据文件类型查找
[root@Centos8 shell_scripy]# find ./ -type l #查找当前目录下的软链接文件
[root@Centos8 shell_scripy]# find ./ -type d #查找当前目录下的目录,含自身目录
[root@Centos8 shell_scripy]# find ./ ! -type d #查找当前目录下的非目录文件
[root@Centos8 shell_scripy]# find ./ -type d | xargs chmod 755 #查找当前目录下的所有目录并修权限
[root@Centos8 shell_scripy]# find ./ -type f | xargs chmod 744 #查找当前目录下的所有普通文件并修权限
-user 、-group根据属主属组查找文件
[root@Centos8 find]# find ./ -user mysql #查找属主是mysql的文件
[root@Centos8 find]# find ./ -group mysql #查找属组是mysql的文件
-size 根据文件大小查找
[root@Centos8 shell_scripy]# find ~ -size +10M #查找家目录下大于10M的文件
[root@Centos8 shell_scripy]# find ~ -size 10M #查找家目录下大小等于10M的文件
[root@Centos8 shell_scripy]# find ~ -size -10M #查找家目录下小于10M的文件
[root@Centos8 shell_scripy]# find ~ -size +50 -size -100M #查找家目录下大于50M小于100M的文件
-perm 根据文件权限查找
-perm mode 参数mode 有较多中写法,可以是数字777这种的写法,也可以是字母的写法
[root@Centos8 shell_scripy]# find ./ -perm 744 #查找当前目录下权限为744的文件及目录
[root@Centos8 ~]# find ./ -type f ! -perm 777 #查找当前目录下没有777权限的普通文件
[root@Centos8 ~]# find ./ -perm 2755 #查找当前目录下具有特殊权限2755的文件或目录
[root@Centos8 ~]# find . -perm /u=w,g=w #查找属主和属组用户都有写入权限的文件
-mtime、-atime、-mmin、-amin 按日期、时间查找
[root@Centos8 ~]# find / -type f -mtime +30 #查找30天前修改的所有普通文件
[root@Centos8 ~]# find / -type f -mtime +10 -mtime -20 #查找最后10-20天修改的所有普通文件
[root@Centos8 shell_scripy]# find / -mtime +30 -name "*.log" #查找30天以前的修改过log文件
[root@Centos8 shell_scripy]# find / -mtime -30 -name "*.log" #查找30天以前修改过的log文件
[root@Centos8 shell_scripy]# find / -mtime 30 -name "*.log" #查找第30天修改过的log文件
[root@Centos8 ~]# find ./ -mmin -60 #查找最近1小时内修改过的文件
[root@Centos8 shell_scripy]# find / -mmin +30 -name "*.log" #查找30分钟以前修改的log文件
[root@Centos8 shell_scripy]# find / -amin +30 -name "*.log" #查找30分钟以前被访问的log文件
[root@Centos8 shell_scripy]# find / -cmin +30 -name "*.log" #查找第30分钟改变的log文件
先查找再执行命令
find / -mtime -30 -type f -size +10k -name "*.log" -exec mv {} /root/shell_scripy/find/test/ \;
find / -mtime -30 -type f -size +10k -name "*.log" -exec ls -l {} \;
find / -mtime -30 -type f -size +500M -name "*.log" -exec rm -rf {} \;
注意:{}是必须的,最后的斜杠和冒号也是必须的,同时{}与路径要用空格,路径与斜杠也必须有空格。