find命令简介
find命令是linux下用于系统查找文件的强大工具,可以根据文件的大小,名称,权限,修改日期等进行查询,参考一些网上非常优秀的博客来进行一些简单应用向的总结。首先是find命令的使用形式:
find paths expression actions
指定多条路径(paths)执行指定过滤条件(expression)并执行相关操作(actions),最终得到结果。
使用find遍历所有文件
以下代码将遍历当前目录所有文件及目录,以及子目录下的文件及目录
针对以下的目录结果:
$ tree dir_tree
dir_tree
├── dir_1
│ ├── file_1.png
│ ├── file_1.sh
│ └── file_1.txt
├── dir_2
│ ├── file_2.png
│ ├── file_2.sh
│ └── file_2.txt
└── dir_3
├── file_3.png
├── file_3.sh
└── file_3.txt
运行如下代码,将遍历所有文件
$ find dir_tree/
dir_tree/
dir_tree/dir_3
dir_tree/dir_3/file_3.sh
dir_tree/dir_3/file_3.txt
dir_tree/dir_3/file_3.png
dir_tree/dir_2
dir_tree/dir_2/file_2.sh
dir_tree/dir_2/file_2.txt
dir_tree/dir_2/file_2.png
dir_tree/dir_1
dir_tree/dir_1/file_1.png
dir_tree/dir_1/file_1.sh
dir_tree/dir_1/file_1.txt
使用find执行文件过滤
-name
将得到指定名称的文件,可以使用通配符-iname
与-name
相同,但是是case insensitive大小写不敏感-path
与-ipath
与-name/-iname
类似,但是提供全路径的匹配
--maxdepth/-mindepth
提供最大和最小遍历深度-type
指定文件类型 f文件/d目录/l符号链接-empty
空文件!
取反-user
用户-mtime/-atime/-ctime
,修改/访问/创建时间使用如下截图
-size
文件大小-perm
例如-perm 755
或者-perm -u=rwx,g=rx,o=rx
,如果只关注某一个权限,可以在前加一个斜杠,例如以下代码将列出所有人都有read权限的文件
find dir_tree -perm /a=r -exec ls -ld {} \;
-a
和-o
可以将这些命令进行and和or的组合,判断复杂时需要加括号,而括号和判断语句之间应该有一个空格相间隔,同时使用单引号包围或者反斜杠进行转义,如下例子将找到目录下后缀为sh和png的文件。
$ find dir_tree/ '(' -name "*.sh" -o -name "*.png" ')' -a -type f
dir_tree/dir_3/file_3.sh
dir_tree/dir_3/file_3.png
dir_tree/dir_2/file_2.sh
dir_tree/dir_2/file_2.png
dir_tree/dir_1/file_1.png
dir_tree/dir_1/file_1.sh
使用find对搜索结果执行命令
-delete
删除操作-exec
执行自定义命令,如下所示
$ find dir_tree/ '(' -name "*.sh" -o -name "*.png" ')' -a -type f -exec echo "cat {} > xxx" ';'
cat dir_tree/dir_3/file_3.sh > xxx
cat dir_tree/dir_3/file_3.png > xxx
cat dir_tree/dir_2/file_2.sh > xxx
cat dir_tree/dir_2/file_2.png > xxx
cat dir_tree/dir_1/file_1.png > xxx
cat dir_tree/dir_1/file_1.sh > xxx