学习find命令的缘由有好多。

不管我决心怎样组织文件,虽然总有难以找到文件的时侯。有时是由于我不记得最初的文件名,其他时侯,我晓得名子,但我不记得在那里保存它了。甚至有时我须要一个我最初就没有创建的文件。而且,无论遇见哪些困难,我晓得在POSIX系统上,总是有find命令可以帮助我。

安装find

find命令由POSIX规范定义,它创建了一个用于评判POSIX系统的开放标准,这包括Linux、BSD和macOS。简而言之,只要你运行的是Linux、BSD或macOS,这么find早已安装了。

然而,并非所有的find命令都完全相同。诸如,GNU的find命令有一些BSD、Busybox或Solaris上find命令可能没有或有但实现方法不同的功能。本文使用findutils包中的GNUfind,由于它很容易获得且十分流行。本文演示的大多数命令都适用于find的其他实现,而且假如你在Linux以外的平台上尝试命令并得到非预期结果linux系统日志,尝试下载并安装GNU版本。

按名称查找文件

你可以利用正则表达式使用完整或部份的文件名来定位文件。find命令须要你给出想搜索的目录;指定搜索属性选项linux下查找文件命令,比如,-name用于指定分辨大小写的文件名;之后是搜索字符串。默认情况下,搜索字符串按字面意思处理:除非你使用正则表达式句型,否则find命令搜索的文件名正是你在冒号之间输入的字符串。

假定你的Documents目录包含四个文件:Foo、foo、foobar.txt和foo.xml。以下是对foo的字面搜索:

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

你可以使用-iname选项使其不分辨大小写来扩大搜索范围:

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

转义

你可以使用基本的shell转义来扩充搜索。诸如linux 下载,*表示任意数目的字符:

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

linux命令行查找文件_查找linux文件的命令_linux下查找文件命令

?表示单个字符:

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

这不是正则表达式句型,因而.在示例中只表示字母“点”。

正则表达式

你还可以使用正则表达式。与-iname和-name一样,也有分辨大小写和不分辨大小写的选项。但不一样的是,-regex和-iregex搜索应用于整个路径,而不仅仅是文件名。这意味着,假如你搜索foo,你不会得到任何结果,由于foo与/home/tux/Documents/foo不匹配。相反,你必需要么搜索整个路径,要么在字符串的开头使用转义:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

查找近一周更改过的文件

要查找近一周更改的文件,使用-mtime选项以及过去的天数(正数):

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

查找近几天更改的文件

你可以结合使用-mtime选项来查找近几天范围内更改的文件。对于第一个-mtime参数,表示上一次更改文件的近来天数。第二个参数表示最大天数。诸如,搜索更改时间超过1天但不超过7天的文件:

$ find ~ -mtime +1 -mtime -7

按文件类型限制搜索

指定查找文件的类型来优化find的结果是很常见的。假如你不确定要查找的内容,则不应当使用此选项。但若果你晓得要查找的是文件而不是目录,或则是目录而不是文件,这么这可能是一个挺好的过滤器。选项是-typelinux下查找文件命令,它的参数是代表不同类型数据的字母代码。最常见的是:

下边是一些事例:

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

调整范围

find命令默认是递归的,这意味着它会在指定的目录中层层搜索结果。这在小型文件系统中可能会显得不堪重负,但你可以使用-maxdepth选项来控制搜索深度:

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

也可以使用-mindepth设置最小递归深度:

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

下载速查表

本文仅介绍find的基本功能,它是一个挺好的搜索工具,但对于强悍的Parallel命令来说,它也是一个十分有用的后端。学习find的缘由有好多,所以下载我们免费的find速查表吧,它可以帮助你了解有关该命令的更多信息。

via:

作者:SethKenlon选题:lujun9972译者:MjSeven校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复