Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
find path -option [ -print ] [ -exec -ok |xargs |grep ] [ command {} \; ]
参数说明 :
path:要查找的目录路径。
~ 表示$HOME目录
. 表示当前目录
/ 表示根目录
print:表示将结果输出到标准输出。
exec:对匹配的文件执行该参数所给出的shell命令。
形式为command {} ;,注意{}与;之间有空格
ok:与exec作用相同,
区别在于,在执行命令之前,都会给出提示,让用户确认是否执行
|xargs 与exec作用相同 ,起承接作用
区别在于 |xargs 主要用于承接删除操作 ,而 -exec 都可用 如复制、移动、重命名等
options :表示查找方式
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-prune #忽略某个目录
实例
将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
find . -name "*.c"
将目前目录及其下子目录中所有一般文件列出
find . -type f
将目前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime -20
查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7 -ok rm {} \;
查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
find . -type f -perm 644 -exec ls -l {} \;
为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
find / -type f -size 0 -exec ls -l {} \;
批量添加当前目录及子目录文件的svn可执行权限
find . -type f | xargs svn propset svn:executable on
获得目前目录及其下子目录下所有*.conf 结尾的文件列表,再使用 xargs将find 命令的输出传递给ls -l
find . -name "*.conf" | xargs ls –l
将目前目录及其下子目录中所有的gate开头的目录列出
find . -type d -name "gate*"
参考资料
https://www.runoob.com/linux/linux-comm-find.html
https://blog.csdn.net/l_liangkk/article/details/81294260
https://blog.csdn.net/wuud__/article/details/86371907
https://www.jianshu.com/p/ea8cc2248022