龙 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 © 2024
京ICP备05028076号
暂时没有评论