Linux find命令的26个简单例子

Linux find

Linux find命令是从命令行搜索文件非常有用和方便的命令。它可以用来查找基于各种搜索标准,如权限,用户所有权,修改日期/时间,大小等文件。在这篇文章中,我们将学习使用find命令以及它支持的各种选项。

find命令在大多数Linux发行版上默认都是可用的,所以你不必安装任何软件包。

find命令的基本语法如下所示

$ find location comparison-criteria search-term

基本的例子

1.列出当前和子目录中的所有文件

此命令列出当前目录中的所有文件以及当前目录中的子目录。

$ find

.

./abc.txt

./subdir

./subdir/how.php

./cool.php

该命令与以下内容相同

$ find .

$ find . -print

2.搜索特定的目录或路径

以下命令将查找当前目录中test目录中的文件。列出默认的所有文件。

$ find ./test

./test

./test/abc.txt

./test/subdir

./test/subdir/how.php

./test/cool.php

以下命令按名称搜索文件。

$ find ./test -name "abc.txt"

./test/abc.txt

我们也可以使用通配符

$ find ./test -name "*.php"

./test/subdir/how.php

./test/cool.php

请注意,所有子目录都是以递归方式搜索的。所以这是一个非常强大的方式来查找给定扩展的所有文件。

试图搜索作为根的“/”目录,将搜索整个文件系统,包括挂载设备和网络存储设备。所以要小心。当然你可以随时按Ctrl + c来停止命令。

当指定目录(本例中为“./test”)时,可以忽略尾部的斜杠。但是,如果目录实际上是其他位置的符号链接,则必须指定尾部的斜线以使其正常工作(找到./test/ ...)

注意:

搜索文件名时忽略大小写通常是有用的。如要要忽略这种情况,只需使用“iname”选项而不是“name”选项即可。

$ find ./test -iname "*.Php"

./test/subdir/how.php

./test/cool.php

3.限制目录遍历的深度

默认情况下,find命令以递归方式遍历整个目录树,这是很耗费时间和资源的。但是可以指定目录层次的深度。例如,我们不希望在子目录中超过2或3个层次。这是使用maxdepth选项完成的。

$ find ./test -maxdepth 2 -name "*.php"

./test/subdir/how.php

./test/cool.php

$ find ./test -maxdepth 1 -name *.php

./test/cool.php

第二个示例使用1的maxdepth,这意味着它不会低于1级深度,只能在当前目录中。

当我们只想在当前目录或最大1级深度的子目录中进行有限的搜索时,这是非常有用的,而不是整个目录树会花费更多的时间。

就像maxdepth一样,有一个名为mindepth的选项,它的名字就是这么做的,也就是说,在搜索文件之前,它会进入至少N级的深度。

4.反转匹配

也可以搜索与给定名称或模式不匹配的文件。当我们知道从搜索中排除哪些文件时,这很有帮助。

$ find ./test -not -name "*.php"

./test

./test/abc.txt

./test/subdir

所以在上面的例子中我们发现了所有没有php扩展名的文件,要么是非php文件。find命令还支持非感叹号。

find ./test ! -name "*.php"

5.结合多个搜索标准

指定名称和反转时可以使用多个标准。例如

$ find ./test -name 'abc*' ! -name '*.php'

./test/abc.txt

./test/abc

上面的find命令查找以abc开头的文件,没有php扩展名。这是使用find命令可以构建强大的搜索表达式的一个例子。

OR运算符

当使用多个名称标准时,find命令会将它们与AND运算符相结合,这意味着只有满足所有标准的文件才会匹配。但是,如果我们需要执行一个基于OR的匹配,那么find命令具有“o”选项。

$ find -name '*.php' -o -name '*.txt'

./abc.txt

./subdir/how.php

./abc.php

./cool.php

上述命令搜索以php扩展名或txt扩展名结尾的文件。

6.仅搜索文件或仅搜索目录

有时我们只想找到文件或只有名字的目录。找到也可以很容易做到这一点。

$ find ./test -name abc*

./test/abc.txt

./test/abc

搜索只有文件

$ find ./test -type f -name "abc*"

./test/abc.txt

搜索只有目录

$ find ./test -type d -name "abc*"

./test/abc7.一起搜索多个目录

所以,让我们说你想要在两个单独的目录内搜索。

$ find ./test ./dir2 -type f -name "abc*"

./test/abc.txt

./dir2/abcdefg.txt

检查它是否列出了来自2个独立目录的文件。

8.找到隐藏的文件

Linux上的隐藏文件以一段时间开始。所以它很容易提及,在名称标准和列出所有隐藏的文件。

$ find ~ -type f -name ".*"

根据权限查找文件

9.查找具有特定权限的文件

find命令可以用于使用“perm”选项来查找具有特定权限的文件。以下命令将搜索具有权限0664的文件

$ find . -type f -perm 0664

./abc.txt

./subdir/how.php

./abc.php

./cool.php

这对于查找具有可能导致安全问题的错误权限的文件会很有用。反转也可以应用于权限检查。

$ find . -type f ! -perm 0777

./abc.txt

./subdir/how.php

./abc.php

./cool.php

10.找到设置了sgid / suid位的文件

find命令的“perm”选项接受与chmod相同的模式字符串。以下命令查找所有具有权限644和sgid位设置的文件。

# find / -perm 2644

同样使用1664粘性位。perm选项还支持使用替代语法而不是八进制数字。

$ find / -maxdepth 2 -perm /u=s 2>/dev/null

/bin/mount

/bin/su

/bin/ping6

/bin/fusermount

/bin/ping

/bin/umount

/sbin/mount.ecryptfs_private

请注意,"2>/dev/null"将删除具有“权限被拒绝”错误的条目

11.找到只读文件

找到所有只读文件。

$ find /etc -maxdepth 1 -perm /u=r

/etc

/etc/thunderbird

/etc/brltty

/etc/dkms

/etc/phpmyadmin

... output truncated ...

12.找到可执行文件

以下命令将查找可执行文件

$ find /bin -maxdepth 2 -perm /a=x

/bin

/bin/preseed_command

/bin/mount

/bin/zfgrep

/bin/tempfile

... output truncated ...

根据所有者和组搜索文件

13.查找属于特定用户的文件

要查找所有者或根目录下根目录下名为tecmint.txt的单个文件。

$ find . -user bob

.

./abc.txt

./abc

./subdir

./subdir/how.php

./abc.php

我们也可以指定文件的名称或任何与名称相关的标准以及用户标准

$ find . -user bob -name '*.php'

很容易看到,我们如何建立标准,以缩小搜索匹配文件的标准。

14.搜索属于组的文件

查找属于特定组的所有文件。

# find /var/www -group developer

你知道你可以使用~符号搜索你的主目录吗?

$ find ~ -name "hidden.php"

根据修改日期和时间搜索文件和目录

find命令支持的另一个很好的搜索条件是修改和访问日期/时间。当我们想找出哪些文件被修改为特定时间或日期范围时,这非常方便。让我们举几个例子。

15.查找N天前修改的文件

查找所有在50天前修改过的文件。

# find / -mtime 50

16.查找最近N天访问的文件

查找过去50天内访问的所有文件。

# find / -atime 50

17.查找在几天内修改的文件

查找50到100天之前修改的所有文件。

# find / -mtime +50 –mtime -100

18.查找最近N分钟内更改的文件。

查找在最近1小时内修改的文件。

$ find /home/bob -cmin -60

19.上个小时修改的文件

查找最近1小时内修改的所有文件。

# find / -mmin -60

20.在最近1小时内查找访问的文件

查找最近1小时内访问的所有文件。

# find / -amin -60

根据大小搜索文件和目录

21.查找给定大小的文件

要找到所有50MB文件,请使用。

# find / -size 50M

22.查找大小范围内的文件

查找所有大于50MB且小于100MB的文件。

$ find / -size +50M -size -100M

23.找到最大和最小的文件

与ls和sort命令结合使用时,find命令可用于列出最大的文件。

以下命令将显示当前目录及其子目录中最大的5个文件。这可能需要一段时间才能执行,具体取决于命令必须处理的文件总数。

$ find . -type f -exec ls -s {} \; sort -n -r head -5

同样按照升序排序时,会先显示最小的文件

$ find . -type f -exec ls -s {} \; sort -n head -5

24.找到空文件和目录

以下命令使用find命令的“空白”选项,查找所有空的文件。

# find /tmp -type f -empty

要输入所有空目录,请使用类型“d”。

$ find ~/ -type d -empty

一些高级操作

find命令不仅可以根据某个标准查找文件,还可以使用任何linux命令对这些文件执行操作。例如,我们可能要删除一些文件。

这里有一些简单的例子

25.列出找到的文件

比方说我们使用find命令找到了文件,现在想把它们列出来,就像ls命令所做的那样。这很容易。

$ find . -exec ls -ld {} \;

drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 .

-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt

drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc

drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir

-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php

-rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php

-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php

26.删除所有匹配的文件或目录

以下命令将删除tmp目录中的所有文本文件。

$ find /tmp -type f -name "*.txt" -exec rm -f {} \;

相同的操作可以用目录来执行,只需要输入类型d,而不是类型f。

让我们拿另一个例子,我们想删除大于100MB的文件

$ find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} \;

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171221G0971600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券