linux find 顺序,linux find 命令

find命令的功能是查找文件,但初学者常常觉得其不易使用,这不仅仅是因为它有选项、测试和动作类型的参数,也由于其中一个参数的处理结果可以影响它后续参数的处理。

在深入研究这些选项、测试和参数之前,先看一个简单的例子,在本地机器上查找名为wish的文件,为了确保我们具备搜索整个机器的权限而以root用户身份来执行此命令:

#find / -name wish -print

/usr/bin/wish

上面命令表示从根目录开始查找名为wish的文件并且输出文件名。

需要注意的是:这个命令的执行需要花费很长时间,如果Linux机器挂载(使用SAMBA)了一大块Windows机器的文件系统,网络上的Windows机器的硬盘也会高速转动,看起来似乎是Windows文件系统也被检索了,尽管我们知道要查找的文件应该在Linux机器上。

一、选项

上面例子中的问题通过指定选项-mount就能很好的解决,即告诉find命令不要搜索挂载的目录:

#find / -mount -name wish -print

这样我们仍然能找到文件,但不必再搜索挂载的其它文件系统。

find命令的完整语法格式如下:

find [path] [options] [tests] [actions]

path域表示搜索路径,可以使用绝对路径(如:/bin),也可以使用相对路径(如:.),也可以指定多个路径(如:find /var /home)。

options域表示选项,有许多选项可用,但主要选项如下:

-depth:在查看目录本身之前先搜索目录的内容。

-follow:跟随符号链接。

-maxdepths N:最多搜索N层目录。

-mount:不搜索其它文件系统中的目录。

二、测试

可以提供给find命令的测试非常多,每种测试返回的结果有两种可能:true或false。find命令开始工作时,按照顺序将定义的每种测试依次应用到它搜索到的每个文件上。如果一个测试返回false,find命令就停止处理它当前找到的这个文件,并继续进行搜索。如果一个测试返回true,find命令将继续进行下一个测试或对当前文件采取行动。下面是最常用的测试,更多测试参考find命令使用手册:

-atime N:文件在N天之前被访问过。

-mtime N:文件在N天之前被修改过。

-name pattern:文件名(不包括路径名)匹配提供的模式pattern,为了确保pattern被直接传递给find命令而不是由shell来处理,pattern必须总是用引号括起。

-newer otherfile:文件比otherfile文件要新。

-type c:文件的类型为C,C可以是一个特殊类型。最普通的类型是d(目录)和f(普通文件)。其它可用的类型请参考使用手册。

-user username:文件的拥有者是指定的用户username。

还可以用操作符来组合测试,大多数操作符有两种格式:短格式和长格式:

短格式         长格式        含义

!                 -not            测试取反

-a                -and            两个测试都必须为真

-o                -or              两个测试之一必须为真

可以通过使用圆括号来强制测试和操作符的优先级。由于圆括号对shell来说有其特殊的含义,所以我们还必须使用反斜线来引用圆括号。此外,如果在文件名处使用的是匹配模式,就必须在模式上使用引号,以确保模式没有被shell扩展,而是直接传递给find命令。如果想写一个测试,即搜索的文件比文件X要新,或者文件名以下划线开头,就可以这样写这个测试:

\(-newer X -o -name "_*" \)

-----括号后要有空格

如果要在当前目录下查找以下划线开头的文件或比while2文件要新的文件,可以如下来写这个测试:

$find . \( -name "_*" -o -newer while2 \) -type f -print

-----括号后要有空格

三、动作

实际上,搜索到匹配指定条件的文件之后,还可以执行一些动作,常见的动作如下,更多动作信息参看find命令的使用手册:

-exec command:执行一条命令。

-ok command:与-exec类似,但它在执行命令之前会针对每个要处理的文件,提示用户进行确认。

-print:打印文件名。

-ls:对当前文件使用命令ls -dils.

-exec和-ok命令将命令行上后续的参数作为它们参数的一部分,直到被\;序列终止。魔术字符串{}是-exec或-ok命令的一个特殊类型的参数,它将被当前文件的完整路径取代。

下面举例说明如何使用ls命令:

$find . -newer while2 -type f -exec ls -l {} \;

-rwxr-xr-x    1    scq    scq    256    Feb    8    17:07    ./test

-rwxr-xr-x    1    scq    scq    257    Feb    8    17:08    ./hello

-rwxr-xr-x    1    scq    scq    258    Feb    8    17:09    ./world

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值