find命令
来源:原创 更新时间:2018-09-03 14:39:32 作者:管理员 浏览:2444
- 命令描述
- 命令语法
- 命令选项
-type 按照指定的类型查找“d目录、f文件、b块设备、c字符设备、l链接文件”
-name 按照文件名或目录名称查找,支持通配符
-iname 按照文件名查找的时候去区分大小写
-size 按照文件大小查找
-mtime 按照修改时间来查找,单位天
-atime 按照访问时间来查找,单位天
-ctime 按照属性时间来查找,单位天
-mmin 按照修改时间来查找,单位分钟
-amin 按照修改时间来查找,单位分钟
-cmin 按照属性修改时间来查找,单位分钟
-prem 按照权限查找(下面细说)
-user 按照文件的属主来查找
-group 按照文件的数组来查找
-nouser 查找系统中不存在属主的文件,查找到之后删除
-nogroup 查找系统中不存在数组的文件
-delete 查找到之后直接删除
! 取反
-a 取交集
-o 取并集
-print0 给文件名加上标识符,需要后面配合xargs -0 配合使用来接收
-exec 理解为传参
- 命令实例
实例1: -maxdepth 查找目录的级数
查找几层目录,/是第一级目录/tmp/就属于第二级目录 [root@zsf /]# find / -maxdepth 2 -name 1.txt /tmp/1.txt [root@zsf /]# find / -maxdepth 3 -name 1.txt /tmp/test/1.txt /tmp/1.txt
实例2: -type指定要查找的文件类型。
d 目录 f 文件 l 链接文件 实例: [root@zsf tmp]# touch 1.txt 2.txt [root@zsf tmp]# mkdir a b [root@zsf tmp]# find /tmp/ -type f /tmp/1.txt /tmp/2.txt [root@zsf tmp]# find /tmp/ -type d /tmp/ /tmp/.ICE-unix /tmp/b /tmp/a
实例3: -name按照文件名字查找
支持正则匹配,但是最好加“” [root@zsf tmp]# find /tmp/ -name *.txt #报错 find: paths must precede expression: 2.txt Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] [root@zsf tmp]# find /tmp/ -name "*.txt" /tmp/1.txt /tmp/2.txt
实例4: -iname 查找文件名的时候不区分大小写
[root@baodian tmp]# touch 1.sh 2.sh 3.SH [root@baodian tmp]# find /tmp -type f -name "*.sh" /tmp/2.sh /tmp/1.sh [root@baodian tmp]# find /tmp -type f -iname "*.sh" /tmp/2.sh /tmp/1.sh /tmp/3.SH
实例5: -size按照大小查找
后面需要跟单位 c表示字节 k M +x 代表大小大于X的 -x 代表大小小于X的 x 代表大小刚好等于X的 [root@zsf /]# dd if=/dev/zero of\=/tmp/find_test.txt count\=1 bs\=10M 1+0 records in 1+0 records out 10485760 bytes (10 MB) copied, 0.00732409 s, 1.4 GB/s [root@zsf /]# dd if=/dev/zero of\=/tmp/find_test_max.txt count\=1 bs\=11M 1+0 records in 1+0 records out 11534336 bytes (12 MB) copied, 0.00994042 s, 1.2 GB/s [root@zsf /]# dd if=/dev/zero of\=/tmp/find_test_min.txt count\=1 bs\=9M 1+0 records in 1+0 records out 9437184 bytes (9.4 MB) copied, 0.0620404 s, 152 MB/s [root@zsf /]# find /tmp -size +10M /tmp/find_test_max.txt [root@zsf /]# find /tmp -size -10M /tmp /tmp/.ICE-unix /tmp/find_test_min.txt [root@zsf /]# find /tmp -size 10M /tmp/find_test.txt 如果查找大于6M小于9M的文件可以省略其中的-a选项 [root@backup tmp]# find /tmp/ -size +6M -a -size -9M /tmp/find_test_2.txt /tmp/find_test_3.txt [root@backup tmp]# find /tmp/ -size +6M -size -9M /tmp/find_test_2.txt /tmp/find_test_3.txt 但如果想取小于6M和大于9M的文件,中间的-o选项就不能省去 [root@backup tmp]# find /tmp/ -size -6M -o -size +9M /tmp/ /tmp/.ICE-unix /tmp/find_test_1.txt
实例6: -mtime(Modify时间)
按照修改时间来查找,单位为天数,+ - 默认和上述一样 [root@zsf tmp]# touch -m -d '2018-07-07' find_test.txt [root@zsf tmp]# touch -m -d '2018-07-13' find_test_max.txt [root@zsf tmp]# find /tmp -mtime +2 /tmp/find_test.txt [root@zsf tmp]# find /tmp -mtime -2 /tmp /tmp/.ICE-unix /tmp/find_test_max.txt /tmp/find_test_min.txt
实例7 : -perm按照权限来查找
如果是777 就是说明这个文件的权限必须是777(必须全部满足) 如果是+444 就是说明这个文件的权限只要有一类属性里面包含这个权限就行了(满足其一即可) 如果是-444 就是说明这个文件的权限必须都具备这写权限(满足即可) [root@zsf tmp]# chmod 777 find_test.txt [root@zsf tmp]# find /tmp -perm 0644 /tmp/find_test_max.txt /tmp/find_test_min.txt [root@zsf tmp]# find /tmp -perm 0777 /tmp/find_test.txt find perm 按照权限查找 分为 不带运算符NUM 当perm不带运算符的时候是最好理解的,权限必须刚好等于perm后面所跟的数字权限 +运算符 +NUM 当+号运算符的时候,我们可以把权限和NUM全部拆分为八进制的权限,让他们一一对应,只需要其中一个1对应上就匹配成功 -运算符 -NUM 当+号运算符的时候,我们可以把权限和NUM全部拆分为八进制的权限,让他们一一对应,必须上下1全部匹配才能匹配成功
实例8: -user 按照文件属主来查询
[root@zsf tmp]# chown zsf find_test.txt [root@zsf tmp]# find /tmp/ -user zsf /tmp/find_test.txt [root@zsf tmp]# ll total 30720 -rw-r--r-- 1 root zsf 11534336 Jul 13 2018 find_test_max.txt -rw-r--r-- 1 root root 9437184 Jul 10 19:45 find_test_min.txt -rwxrwxrwx 1 zsf root 10485760 Jul 7 00:00 find_test.txt
实例9: -nouser 查找无效属主的文件,属主不存在/etc/passwd里面的,系统里面不允许有这类文件
[root@zsf tmp]# userdel zsf [root@zsf tmp]# find /tmp/ -nouser /tmp/find_test.txt
实例10: -group 按照文件属组来查询
[root@zsf tmp]# chown :zsf find_test_max.txt [root@zsf tmp]# find /tmp/ -group zsf /tmp/find_test_max.txt [root@zsf tmp]# ll total 30720 -rw-r--r-- 1 root zsf 11534336 Jul 13 2018 find_test_max.txt -rw-r--r-- 1 root root 9437184 Jul 10 19:45 find_test_min.txt -rwxrwxrwx 1 zsf root 10485760 Jul 7 00:00 find_test.txt
实例11: !取反
不属于zsf这个用户的或者权限是777的 [root@zsf tmp]# find /tmp/ ! -user zsf -o -perm 777 /tmp/ /tmp/1.sh /tmp/3.sh /tmp/4.sh
实例12:-a and 取交集
[root@zsf tmp]# chown zsf 1.sh [root@zsf tmp]# chown zsf 2.sh [root@zsf tmp]# chmod 777 1.sh [root@zsf tmp]# ll total 0 -rwxrwxrwx 1 zsf root 0 Jul 10 20:42 1.sh -rw-r--r-- 1 zsf root 0 Jul 10 20:39 2.sh -rw-r--r-- 1 root root 0 Jul 10 20:39 3.sh -rw-r--r-- 1 root root 0 Jul 10 20:42 4.sh 找属于zsf并且权限是777的文件 [root@zsf tmp]# find /tmp/ -user zsf -a -perm 777 /tmp/1.sh
实例13: -o or 取并集
环境和2.1.3.15相同 [root@zsf tmp]# find /tmp/ -user zsf -o -perm 777 /tmp/2.sh /tmp/1.sh
实例14: -print0 给文件名加上标识符,需要后面配合xargs -0配合使用来接收
[root@linuxbaodian ~]# mkdir /Linuxbaodian [root@linuxbaodian ~]# cd /Linuxbaodian/ [root@linuxbaodian Linuxbaodian]# touch test_file{1..10} [root@linuxbaodian Linuxbaodian]# ls test_file1 test_file10 test_file2 test_file3 test_file4 test_file5 test_file6 test_file7 test_file8 test_file9 [root@linuxbaodian Linuxbaodian]# rename '_' " " * [root@linuxbaodian Linuxbaodian]# ls test file1 test file10 test file2 test file3 test file4 test file5 test file6 test file7 test file8 test file9 [root@linuxbaodian Linuxbaodian]# rm -rf test file2 [root@linuxbaodian Linuxbaodian]# ls test file10 test file2 test file3 test file4 test file5 test file6 test file7 test file8 test file9 [root@linuxbaodian Linuxbaodian]# find /Linuxbaodian/ -type f -name "test*" -print0 | xargs -0 rm -rf [root@linuxbaodian Linuxbaodian]# ls [root@linuxbaodian Linuxbaodian]#
实例15: -exec 理解为传参
find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。可以指定传递过来参数的位置 [root@oldboy50 tmp]# [root@oldboy50 tmp]# find /tmp/ -name 123 -exec mv {} 321 \; [root@oldboy50 tmp]# ls 321
实例16 | 和 |xargs和-exec和|xargs -i的区别
| 是把前面的执行结果当做文本来处理 |xargs 是把前面的执行结果当做文件名来处理 使用-exec的时候是边查找边执行,可以指定参数的前面结果的位置 | xargs是find管道前处理完事之后,才会传递到后面,然后一条命令处理,不能指定参数的位置,直接放到末尾 | xargs -i 是管道前面处理完成之后,传递到后面,然后进行逐条的处理,可以指定前面结果的位置。