find 是一个非常强大的用于查找文件的工具
遇到过的问题
- linux - How to exclude a directory in find . command - Stack Overflow
- regex - Find command regextype difference between ‘posix-extended’ and ‘posix-egrep’ - Stack Overflow
- Get absolute path of files using ‘find’ command - Ask Ubuntu
如何结合两个-name
条件
本部分参考自 bash - How to combine 2 -name conditions in find? - Unix & Linux Stack Exchange
其中提问者想要达到的目的如下:
1
find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"
-o
可以通过 Linux 中条件表达式(EXPRESSIONS)中的-o
实现,这里的用法和test
命令类似(参见 man test
)。如下所示:
1
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
你可以在适当的位置添加如下逻辑运算符:
-a -and - operator AND -o -or - operator OR ! - operator NOT
-regex
也可以通过使用find
命令的-regex
间接实现
1
find ./ ! -regex '.*\(deb\|vmdk\)$'
查找文件时如何排除(exclude)特定的目录?
这部分内容参考自 linux - How to exclude a directory in find . command - Stack Overflow
-prune
配合-o
该方法不易理解
1
find . -path ./misc -prune -o -name '*.txt' -print
排除多个目录:
1
find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print
-not
配合-path
该方法相比上面那个方法更容易理解,但是性能较差:
1
find -name "*.js" -not -path "./directory/*"
注意:该方法将会遍历所有目录(即使你排除的目录),性能较差
链接
下面总结了本文中使用的所有链接: