Find命令

Posted by wsxq2 on 2019-06-10
TAGS:  findLinuxTODO

本文最后一次编辑时间:2021-08-22 22:41:44 +0800

find 是一个非常强大的用于查找文件的工具

遇到过的问题

如何结合两个-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/*"

注意:该方法将会遍历所有目录(即使你排除的目录),性能较差

链接

下面总结了本文中使用的所有链接: