感谢各位简友一直的关注。
请关注:感谢陪伴
翻译整理于:15 Super Useful Examples of the Find Command in Linux
感觉学会了这些可以节省不少代码量和运行时间耶 :)
觉得自己find
白学的老铁抠波6
命令通常包含三部分:目录、选项、表达式
- 指定要搜索的目录,默认当前目录
- 指定搜索类型
- 指定搜索的词条
当前目录下根据名字搜索文件或目录
find . -name SEARCH_NAME
仅搜索文件或目录
# only file
find . -type f -name SEARCH_NAME
# only directory
find . -type d -name SEARCH_NAME
不区分大小写
find . -type f -iname SEARCH_NAME
根据扩展名搜索
find . -type f -name "*.cpp"
- 建议加上双引号,否则若存在多个匹配文件则会报错
多种扩展名
find . -type f -name "*.cpp" -o -name "*.R" -o -name "*.sh"
多个目录
find ./location1 /second/location -type f -name "pattern"
多重条件/逻辑运算符
选项:
-a:and逻辑与
-o:or逻辑或
-not:not逻辑非
-a: and 逻辑与
find 命令也支持逻辑运算符选项,其中 -a 代表逻辑与运算,也就是 -a 的两个条件都成立,find 搜索的结果才成立。
# 在当前目录下搜索大于2KB,并且文件类型是普通文件的文件
find.-size +2k -a -type f
# 在当前目录下搜索3天以内修改过,并且权限是644的文件
find.-mtime -3 -a -perm 644
-o: or 逻辑或
-o 选项代表逻辑或运算,也就是 -o 的两个条件只要其中一个成立,find 命令就可以找到结果。例如:
# 在当前目录下搜索文件名要么是cangls的文件,要么是bols的文件
find.-name cangls -o -name bols
-not: not 逻辑非
-not是逻辑非,也就是取反的意思。
# 在当前目录下搜索文件名不是cangls的文件
find.-not -name cangls
搜索空文件或目录
find . -empty
# 指定文件类型
find . -empty -type f
# 匹配文件名
find . -empty -type f -name "*.cpp"
根据文件大小
# 确定的大小
find . -size 50k
# 大于
find . -size +1G
# 小于
find . -size -20c
# 大于小于
find . -size +100M -size -2G
# 同时支持按文件名检索
find / -size +500M -name "*.log"
文件大小单位:
-
c
: bytes -
k
: kilobytes -
M
: Megabytes -
G
: Gigabytes
搜索最近修改的
这个没意思,不整理了
搜索特定权限的文件
find . -perm 777
find . -perm a=r+w
设置搜索深度
# 只在当前目录搜索
find . -maxdepth 1 -type f -name "*.txt"
不搜索特定的目录
find . -path "./directory_exclude/*" -prune -o -name SEARCH_NAME
-prune
始终与-o
一起使用,以确保右侧的检索词只对没有被prune
(修剪)的目录进行搜索
进一步处理搜索结果
使用 exec
列出搜索结果文件的详细信息(ls -l
)
find . -type f -name "*.txt" -exec ls -l {} +
{}
保存find
的结果, +
提示exec
命令结果,可以用\;
代替;但也有不同,+
结尾对所有文件一起执行命令(ls -l file1 file2 file3
),而\;
结尾是对每一文件都执行命令(ls -l file1, ls -l file
)
比如,当需要对每一文件重命名时,就可以这样:
# 将*.txt"的文件重命名为*.txt.old"
find . -type f -name *.txt" -exec mv {} {}.old \;
使用 xargs
对于这种变量重定向,我们更常用的是xargs
:
find . -type f -name *.txt" | xargs ls -l
与grep
联用
# exec
find . -type f -name "*.txt" -exec grep -i alice {} +
# xargs
find . -type f -name "*.txt" | xargs grep -i alice