设为首页 - 加入收藏 - 网站地图 欢迎加QQ群 :14364084
当前位置:谭博的博客 > linux > 正文

Linux_shell_find

时间:2011-10-28 13:03 来源:Linux_shell_find 标签:Linux_shell_find 作者:Linux_shell_find 阅读:

导语:Linux_shell_find

在运行一个耗资源的find命令时 多数人喜欢在后台执行

1.find命令的一般形式为:

find pathname -options [-print -exec -ok]

pathname    fina命令所查找的目录路径 . 表示当前目录, / 表示系统根目录

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

-exec            find命令对匹配的文件执行该参数所给出的shell命令 相应的命令格式为:'command' {} \;

-ok               和-exec的作用相同,以一种更为安全的模式来执行该参数所给出的shell命令 在执行每一个命令之前,会给出提示

                     让用户来确定是否执行

2.1   find命令选项

-name                按照文件名查找文件

-perm                 按照文件权限查找文件

-prune                这一选项可以使find命令不再当前指定的目录中查找 如果荣是使用了-depth选项 那么-prune选择将被find命令忽略

-user                  按照文件属主来查找文件

-group                按照文件所在属主的组来查找文件

-mtime -n +n      按照文件更改日期来查找文件   -n 表示文件更改时间距现在n天以内。+n 表示文件更改时间距现在n天以前

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

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

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

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

-size n[c]           查找文件长度为n块的文件,带有c时表示文件长度以字节计

-depth               查找此文件时,首先查找当前目录中的文件,然后再在其子目录中查找

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

                          该配置文件中包含了本系统中有关文件系统的信息

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

-follow                如果find命令遇到符号链接文件,就跟踪至链接所指向的文件

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

示例:

1. name:按文件名(find pathname -options [-print -exec -ok])

name是find命令最常用的选项,匹配文件时记住要用引号将文件名模式引起来

不管当前路径是什么 如果想要在自己的跟目录$HOME中查找文件名符合*.txt的文件 使用~作为'pathname'参数 ~代表了你的$HOME目录

# find ~ -name "*.txt" -print

查找当前目录及子目录中所以*.txt文件 和 以一个大写字母开头的*txt文件 和以大写字母R开头的所以*.txt 和以小写字母r开头的所*.txt

# find . -name "*.txt" -print

#find . -name "[A-Z]*.txt" -print

#find . -name "R*.txt" -print

#find . -name "r*.txt" -print

查找$HOME中的所有文件

#find ~ -name "*" -print

想查找第一位是一个大写字母 第二位是一个小写字母 第三位是一位是数字 组成的.txt 文件

例如:Cs3.txt

#find / -name "[A-Z][a-z][0-9]*.txt" -print

2. perm:按权限(find pathname -options [-print -exec -ok])

在当前目录查找文件权限位为777的文件 即所有用户都可读,写,执行

#find . -perm 777 -print

查找当前目录下 所有用户 可读,写,执行(007 文件属主 同组有户权限位为 0 0 所有用户可rwx 为7)的文件

#find . -perm -007 -print

3. prune:忽略某个目录(find pathname -options [-print -exec -ok])

如果希望在根目录的var中查找某个文件 但是不希望在var目录中的ftp目录中查找 可使用以下命令

# find /var -name "/var/ftp" -prune -o -print

4.user 和 nouser 按照文件属主来查找文件

如果按照文件属主查找文件,可以给出相应的用户名

在pub中查找属主为root的文件

# find /var/ftp/pub -user root -print

查找根目录下属主帐户被删除的文件 在使用-nouser是不需知道用户名

#find /home -nouser -print

5. group 和 nogroup 用法和user nouser一样

#find /var/ftp/pub -group root -print

#find /home -nogroup -print

6.mtime

在var目录下查找更改时间在5日内的文件

#find /var -mtime -5 -print

在var目录下查找更改时间在2日之前的文件

#find /var -mtime +2 -print

7.newer

下面命令查找在当前目录中 比 syslog.conf 新但比 yp.conf旧的文件

# find . -newer syslog.conf ! -newer yp.conf -exec ls -l {} \;

假如有一文件aaa.txt 创建时间时 05-24 16:13 aaa.txt   那么使用以下命令可查找 16:13 到系统当前时间内更改的文件

#find . -newer aaa.txt -exec ls -l {} \;

如果要查找一小时以内更改过的文件 那么需要创建一个距系统时间前一个小时的文件

例如系统现在时间是6:00 那么需要创建一个文件(agotime.txt)的时间是5:00 的文件在使用如下命令即可查找出1小时以内更改过的文件

#find . -newer agotime.txt -exec ls -l {} \;

8. type

查找etc下的所有符号链接(l)文件

#find /etc -type l -exec ls -l {} \;

查找etc下的所有非符号链接(l)文件

#find /etc ! -type l -exec ls -l {} \;

查找etc下的所有目录

# find /etc -type d -print

9.size

使用size查找文件 文件长度既可以是块也可以是以字节来计量。以字节计量文件长度的表达式为Nc ,块计量只用数字即可

在$HOME目录中查找文件长度大于1000字节的文件

# find ~ -size +1000c -print

在$HOME目录中查找文件等于于1000字节的文件

# find ~ -size 1000c -print

在$HOME目录中查找文件大于10快(1块等于512字节)的的文件

# find ~ -size +10 -print

10 使用exec或ok来执行shell

-exec

在根目录查找所以txt文件 并删除它们

#find / -name "*.txt" -exec rm {} \;

-ok

在根目录查找所以txt文件 并删除它们

#find / -name "*.txt" -ok rm {} \;

< rm ... /t.txt > ?

输入y执行rm命令

 

 

关注微信公众号

微信扫一扫,打赏我

热评文章
    内容不错,支持一下
    评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)