find命令

Posted Dothraki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find命令相关的知识,希望对你有一定的参考价值。

--本文原创

命令格式

find  /path/to/somewhere/  - options [- print -exec -ok ...]

1   /path/to/somewhere/   是find命令所查找的路径,例如"."表示当前路径,可使用绝对或者相对路径

2   -print 表示将匹配到的文件输出到标准输出中,默认是当前屏幕,可重定向输出流

3  -exec 表示对find命令查找匹配到的文件执行exec给出的shell 命令,相应的命令形式为 ‘command‘ {} \; 注意{}和\;之间的空格

4  -ok 作用和-exec相同,只不过是一种更安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,会给出提示,让用户来确定是否执行

查找模式

1 -name 按文件名查找

2 -perm 按照文件权限查找

3 -prune 不在当前指定的目录查找,如果同时使用-dept那么-prune将被忽略

4 -user 按文件属主查找

5 -group 按文件属组查找

6 -mtime -n +n 按文件更改时间查找,-n 表示从此刻算起,文件的更改时间是在n天以内,+n表示文件的更改时间在n天之前

7 -ctime 文件改变时间change time 选项-n,+n意义如上

8 -nogroup 查找无有效属组的文件,即该文件所属的组在/etc/groups中不存在

9 -nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在

10 -newer file1 file2 查找更改时间比file1新但比文件file2旧的文件,即file1<查找目标<file2

11 -type 按文件类型查找  b , d , c , p , l , f, s

12 -size n 表示查找大小为n的文件 带c表示大小以字节计算

13 -depth 表示查找文件时,首先查找当前目录中的文件,然后在其子目录中查找

14 -fstype 表示查找位于某一类文件系统中的文件,这些文件系统通常可以在配置文件/etc/fstab中找到

15 -mount 表示查找文件时不跨越文件系统mount点

16  -follow 表示如果find命令遇到符号链接文件,就跟踪至链接所指向的文件

17 -cpio 表示对匹配的文件使用cpio命令,将这些文件备份到磁带设备中

 

一般用-exec或者-ok来执行shell 命令,任何形式的命令都可以在-exec中使用

实例

列出当前目录所有普通文件

[[email protected] ~]# find . -type f -exec ls -l {} \;
-rw-r--r--. 1 root root 18 12月 29 2013 ./.bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 ./.bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 ./.bashrc
-rw-r--r--. 1 root root 100 12月 29 2013 ./.cshrc
-rw-r--r--. 1 root root 129 12月 29 2013 ./.tcshrc
-rw-------. 1 root root 1382 11月 13 20:14 ./anaconda-ks.cfg
-rw-------. 1 root root 2 11月 13 12:15 ./.cache/dconf/user
-rw-------. 1 root root 11 5月  13 13:03 ./.cache/abrt/lastnotification
-rw-r--r--. 1 root root 463 11月 13 12:15 ./.dbus/session-bus/9ef6301b72a14a6e8a38e7e00cf69136-9
-rw-r--r--. 1 root root 1433 11月 13 12:15 ./initial-setup-ks.cfg
-rw-------. 1 root root 3212 5月  13 12:40 ./.bash_history
-rw-------. 1 root root 66 11月 13 14:24 ./.xauth3HNIPU
-rw-r--r--. 1 root root 397 5月  10 16:58 ./.ssh/known_hosts
-rw-------. 1 root root 408 5月  10 17:02 ./.ssh/authorized_keys
-rw-r--r--. 1 root root 408 5月  10 17:19 ./.ssh/my_rsa.pub
-rw-------. 1 root root 1675 5月  10 17:19 ./.ssh/id_rsa
-rw-------. 1 root root 4123 5月  13 12:16 ./.viminfo
-rw-r--r--. 1 root root 16 5月  13 12:46 ./test

查找passwd文件中某个用户是否存在

[[email protected] ~]# find /etc/ -name passwd -exec grep gandefeng {} \;
gandefeng:x:1002:1002::/home/gandefeng:/bin/bash

查找当前用户家目录中所有的文件,包含隐藏文件

 

[[email protected] ~]$ find ~ -print
/home/gandefeng
/home/gandefeng/.mozilla
/home/gandefeng/.mozilla/extensions
/home/gandefeng/.mozilla/plugins
/home/gandefeng/.bash_logout
/home/gandefeng/.bash_profile
/home/gandefeng/.bashrc
/home/gandefeng/.cache
/home/gandefeng/.cache/abrt
/home/gandefeng/.cache/abrt/lastnotification
/home/gandefeng/.config
/home/gandefeng/.config/abrt
/home/gandefeng/test
/home/gandefeng/.viminfo
/home/gandefeng/.bash_history

 

 

xargs对find的配合使用

    在find和-exec 处理匹配文件时,find命令将所匹配到的文件一起传递给exec执行,但是有的系统传递给exec的命令长度是有限制的,find命令运行几分钟后会溢出错误,通常是参数太长或参数列溢出,所以,find把匹配到的文件传递给xargs 而xargs每次只获取一部分而不是全部,分批次处理,有的系统在使用-exec会为每一个匹配到的文件发起一个相应的进程,并非将所匹配到的文件全部作为参数一次执行,这样会出现过多的进程,系统性能下降,而xargs只有一个进程,而且还可以根据参数来调整xargs接受的量

 

例:查找当前目录中每一个普通文件,然后测试属于的文件类型

[[email protected] ~]$ find . -type f |xargs file
./.bash_logout:                 ASCII text
./.bash_profile:                ASCII text
./.bashrc:                      ASCII text
./.cache/abrt/lastnotification: ASCII text
./test:                         ASCII text
./.viminfo:                     UTF-8 Unicode text
./.bash_history:                ASCII text


 

to be continued..

 

以上是关于find命令的主要内容,如果未能解决你的问题,请参考以下文章

使用sunOS中的find命令比较两个目录中的所有文件

实用代码片段将json数据绑定到html元素 (转)

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段——cli的终端命令大全

VSCode自定义代码片段4——cli的终端命令大全