linux find 排除目录,Linux find命令详解,查找时非管道排除目录

find是linux 命令,它将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find 根据下列规则判断 path 和 expression,在命令列上第一个 – ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。

find命令的参数

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

-print: find命令将匹配的文件输出到标准输出。

-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } \;,注意{ }和\;之间的空格。

-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

# -print 将查找到的文件输出到标准输出

# -exec   command   {} \;      —–将查到的文件执行command操作,{} 和 \;之间有空格

# -ok 和-exec相同,只不过在操作前要询用户

====================================================

-name filename #查找名为filename的文件

-perm #按执行权限来查找

-user username #按文件属主来查找

-group groupname #按组来查找

-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前

-atime -n +n #按文件访问时间来查GIN: 0px">

-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在

-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存

-newer f1 !f2 #找文件,-n指n天以内,+n指n天以前

-empty #空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name

-ipath p,-path p #路径名称符合 p 的档案,ipath 会忽略大小写

-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在

-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存

-newer f1 !f2 #查更改时间比f1新但比f2旧的文件

-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件

-size n[c] #查长度为n块[或n字节]的文件

-depth #使查找在进入子目录前先行查找完本目录

-newer file1 ! file2 #查更改时间比f1新但比f2旧的文件

-type b/d/c/p/l/f #查是块设备/目录/字符设备/管道/符号链接/普通文件

-size n[c] #查长度为n块[或n字节]的文件

-depth #使查找在进入子目录前先行查找完本目录

-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到

-follow #如果遇到符号链接文件,就跟踪链接所指的文件

-cpio #对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

-mount #查文件时不跨越文件系统mount点

-prune #忽略某个目录,使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。

现在来详细说说-prune

find [-path ..] [expression] 在路径列表的后面的是表达式

-path "/usr/kinggoo" -prune -o -print 是 -path "/usr/kinggoo"-a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path "/usr/kinggoo" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "/usr/kinggoo" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。如果要加其他选项需要加在-o之后(下面会有例子)

find /usr/kinggoo -path "/usr/kinggoo/T" -prune -o -print

这个表达式组合特例可以用伪码写为

if -path "/usr/kinggoo/T" then

-prune

else

-print

避开多个文件夹

find /usr/kinggoo \( -path /usr/kinggoo/T -o -path /usr/kinggoo/file1 \) -prune -o -print

圆括号表示表达式的结合。

\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义

详细例子:

[root@kinggoo svnconf]# find ../svnconf \( -path ../svnconf/qiyemoban \) -prune -o -print

../svnconf

../svnconf/txt

../svnconf/index.html

../svnconf/qa.conf

../svnconf/index.html.bk

../svnconf/android_vt.conf

../svnconf/NULL

../svnconf/svntomail.sh

../svnconf/svntomail.sh.bk

../svnconf/qiyemoban.zip

../svnconf/android_pad.conf

发现了吧 上面没有qiyemoban这个文件夹了,其实他没有被打印出来,

[root@kinggoo svnconf]# ls

android_vt.conf index.html NULL qiyemoban svntomail.sh txt

android_pad.conf index.html.bk qa.conf qiyemoban.zip svntomail.sh.bk

查找某一确定文件,-name、-type等选项加在-o 之后

例:

[root@kinggoo svnconf]# find ../svnconf \( -path ../svnconf/qiyemoban \) -prune -o -name "txt" -print

../svnconf/txt

[root@kinggoo svnconf]# find ../svnconf \( -path ../svnconf/qiyemoban \) -prune -o -type d -print

../svnconf # 当然只有自己是目录了,为了演示使用的是../上一级在指定当前目录 只是我懒。跟find正常命令一样即可

望有帮助!

- THE END -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值