欢迎访问linux宝典,请记住本站唯一域名:www.linuxbaodian.com

find命令

来源:原创    更新时间:2018-09-03 14:39:32    作者:管理员    浏览:2444
  • 命令描述
用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
  • 命令语法
find [目录] [选项] [参数]
  • 命令选项
-maxdepth 查找目录的级数
-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 是管道前面处理完成之后,传递到后面,然后进行逐条的处理,可以指定前面结果的位置。


上一条命令:tee

下一条命令:unlink

笔记分享

表情

共0条分享记录
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

相关内容

最受欢迎

猜你喜欢

最受争议