Linux 常用命令复习 4 -- find --v_May_21

 2010年05月18日 星期二 22:39 | 1642次浏览 | 0条评论


记得   -h  --hlep  以及  man  !!!!



find - search for files in a directory hierarchy

基本格式

开始之前,我们先来看一下 find 命令的基本结构:
ubuntu 中 man 给出的完整格式

find       [-H] [-L] [-P]        [-D debugopts]          [-Olevel]         [path...]  [expression]
[expression] 中包括在其它命令中所说的参数

可以看出, 只是比常用格式多了 3 段参数

[-H] [-L] [-P]    3个参数是控制如何对待符号链接文件
-P 返回的结果是符号链接本身属性, 不是源文件的
-L 与 -P 相反, 返回结果是链接的源文件的属性, 不是符号链接
-H 当符号链接正常时同 -P , 当符号链接被断开时,同 -L, 如果源文件不存在, 则返回符号链接本身的属性
( -L 和 -H 还有更详细的, 如何影响其它参数的说明, 请 man find )

[-D debugopts]  对 find 进行 debug (平常用不到的吧, 用的时候请 man find  或者 find -D help  )

[-Olevel]   find 命令对 [express] 等参数进行查找的次序
0 等同 1
1 默认,即先按文件名进行查找
2 任何按 -type 和 -xtype 的文件查找,将安排在文件名查找之后,但优先于请求文件的其它信息以进行查找
3 其余的匹配标准的次序等级


[path...]  [expression]   这个... 就是平常用的了
平常我们只用  find [path...]  [expression]
再扩展下:
find   StartDirectory   (前面是 path ,后面是 expression )   Test Options CriteriaToMatch ActionToPerformOnResults

-------------------------------------------------------------------------------
Test   我们想 find 命令进行匹配的方式
-name               按照文件名查找文件。
-perm                 按照文件权限来查找文件。
-prune                使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
例:  
find . -type f -perm a=rwx
find . -type f -perm 777

-amin n  查找系统中最后N分钟访问的文件
-atime n  查找系统中最后n*24 小时访问的文件
-cmin n  查找系统中最后N分钟被改变文件状态的文件
-ctime n  查找系统中最后n*24小时被改变文件状态的文件
-mmin n  查找系统中最后N分钟被改变文件数据的文件
-mtime n  查找系统中最后n*24小时被改变文件数据的文件
• -n 返回项小于 n
• +n 返回项大于 n
• n 返回项正好与 n 相等


-user                   按照文件属主来查找文件。
-group                  按照文件所属的组来查找文件。
-mtime -n +n        按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。

-nogroup                查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser                    查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2   查找更改时间比文件 file1新但比文件file2旧的文件。

-type                        查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。

-size n    查找文件长度为n块的文件, n 后面可以加单位
b  默认, 512 byte 为一块 作为单位
c   以 字节 为单位
w  以 双字节 为单位
k   以 kilobytes 为单位(1k = 1024 bytes)
M  1M = 1024 kilobytes
G   1G = 1024M


居然还有  -true  和  -false  也就是永远匹配成功和匹配不成功

-----------------------------------------------------------------------------------
Option   这个就是平常命令里面的参数了

-daystart  只配合 Test 中 -amin  -atime 等和时间有关的选项来使用, 时间点将被设置为今天开始的时候, 而不是默认的 24小时 前
-maxdepth levels    设置 find 命令搜索目录的最大级数(最多 path 中的目录往下搜索 levels 层)
-mindepth levels    意义同 maxdepth , 在进入 levels 层以下的目录前, 不搜索任何文件
-mount  不进入任何其它文件系统的目录, 在某些版本的 find 中与  -xdev 选项相同( Optiong 中的 )
-regextype  type  在后面的命令中使用正则表达式的语法,  type 为正则表达式的版本选项,  可选 -regex 与 -iregex

---------------------------------------------------------------------------------------
Action   如何处理找到的文件

-delete  会英文的都知道做什么的吧?  删除找到的文件, 删除出错会返回错误信息并停止 find ( 从这里可以看出 find 是找到 1 个文件, 就执行 1 次 Action  )

-exec command ;  
-exec command {} +
-exedir command :
-exedir command {} +

执行 command 这条命令. 也就是说 可以在 command 的位置输入 bash 命令来处理找到的文件.  ( !!!   注意, 别漏了分号  !!!)

-ok command :
-okdir command ;
-exec 和 -execdir 带确认功能的版本

---------------------------------------------
Action 一项中最为繁杂的一类参数
格式化输出结果

-fprint file   将 find 命令的输出结果 写入 到文件 file 中. 如果 file 不存在则新建, 如果存在则覆盖掉. 如果结果为空, 则会产生 1 个空的 file 文件

-print      在 find 的输出中, 每个文件名都显示在新一行
-print0    和 -print 相对, 所以文件名 显示在一行, 两个之间用一个 NULL 字符隔开

-fprint0 file     等于 fprint 加上 print0
-fprintf file format   等于 fprint 加上  printf

-printf format   看到这个名字大家都很熟悉吧? 所以, 很容易想到这个和 C 语言 里面的 printf 函数的功能和用法很相似. 

即等同于  printf("format")   (这个 printf 是  C语言里面那个函数  ) 
运行过程可以看成,  一个次数为找到的文件个数的循环, 循环体中有 1 条 printf 语句

比如:
find -iname *.ape -printf %p\ %c\\n
输出为:  文件名  空格  最后修改时间  换行  (  \\n  第一个  \  是转义符,  最后转换结果是 \n  )

format 的详细列表自己 man 一下吧, 我这里就列几个常用的
%P   文件名( 只有文件名  )
%p   文件名( 前面会加上  到当前目录 的相对路径  )
%s    文件大小
%y    文件类型

%a   最后读取文件的时间
%c    最后修改文件的时间

%m   文件使用权限( 8进制数字表示 )
%M   文件使用权限( 字母表示,  同命令 ls -all 中一样 )

\n     换行(   实际使用的时候是  \\n  ,也就是前面加个转义符  )
%%  百分号

Expression   这个就是描述匹配标准的正则表达式

expr1 expr2
expr1 -a expr2
expr1 -and expr2
这 3 个式子意思一样
都是  表达式 expr1 与 表达式 expr2 进行逻辑与, 即都符合 2 个表达式的文件才会被找出来

expr1 -o expr2
expr1 -or expr2
同上, 2 个式子都是进行 逻辑或

! expression
-not expression
同理, 逻辑非

( expression )  可以像这样给表达式套上括号以方便进行逻辑运算

------- [  Fin  ] -------------------------------------------------------------------------

find 这个命令的讲解都可以做 3 个普通命令了, 好长

我这里只是简略点了一下
各位有时间有需要的 还是好好看看 man 吧

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !

暂时没有评论

Zeuux © 2024

京ICP备05028076号