简明Linux命令行笔记:find

根据条件查找文件

find [directory-list] [expression]

 

参数

directory-list用来指定find要搜索的目录层次结构或范围

当没有指定directory-list时,find将搜索当前工作目录的层次结构

 

条件

在expression中可以使用的条件很多,我把它们分类写出来了

其中部分条件包含+-n,意思是:

+n         比n大

-n          比n小

 n          正好是n

 

以文件属性查找

-user name                       查找所有者为name的文件

-group name                     查找文件所在组为name的文件

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

-nogroup                           查找不属于任意群组的文件

-nouser                             查找不属于任意用户的文件

-perm mode                      依据文件权限查找文件

-inum n                              查找节点为n的文件

-links +-n                           查找文件链接数+-n的文件

-size +-n[c|k|M|G]              依据文件大小来查找文件,默认大小是+-n倍512字节的块,或使用Kb、Mb、Gb为单位

 

以时间单位查找

时间单位后面接+-n,表示多少(天,分钟)之内/外,下面是6种时间单位

天:ctime   atime   mtime

分钟:cmin   amin   mmin

那,上面的c   a    m代表什么意思呢

c                  change改变 ,表示文件属性被修改过,包括所有者、群组、权限等(也就是ls -l能看到的内容)

a                  access访问

m                 modify修改,表示文件内容被修改

 

以文件类型查找

-type filetype                   如果文件类型为filetype,则文件满足查找条件,文件类型包括:

                                        b                  特殊的块文件

                                        c                  特殊的字符文件

                                        d                  目录文件

                                        f                   普通文件

                                        l                   符号链接

 

连接符

-a                                    and逻辑与

-o                                    or逻辑或

-exec command { } \;        此处是固定格式,表明查找到文件后执行某些操作

                                         { } 代表find中查找的结果

                                         \ 代表转义符,使用命令本身的命令(忽略别名)

                                         ; 代表整条语句结束

-ok                                    询问是否执行操作,用法同exec 

 

示例1 (以属性查找)

find -user

$ find /etc -user siu
/etc/firefox-3.0
/etc/firefox-3.0/pref
/etc/firefox-3.0/pref/apturl.js

根据所有者来查找文件

 

find -perm

$ find /etc -perm 600
/etc/ppp/chap-secrets
/etc/ppp/pap-secrets
/etc/passwd-
/etc/group-
/etc/gshadow-
/etc/.pwd.lock
/etc/shadow-
/etc/apt/trustdb.gpg
/etc/default/cacerts
/etc/security/opasswd
/etc/mysql/debian.cnf
/etc/mtab.fuselock

根据文件权限来查找文件

 

find -name

$ find /etc -name init
/etc/init
/etc/apparmor/init

$ find /etc -name init*
/etc/init
/etc/apparmor/init
/etc/initramfs-tools
/etc/initramfs-tools/scripts/init-premount
/etc/initramfs-tools/scripts/init-bottom
/etc/initramfs-tools/scripts/init-top
/etc/initramfs-tools/initramfs.conf
/etc/bash_completion.d/initramfs-tools
/etc/init.d
/etc/kernel/postinst.d/initramfs-tools
/etc/kernel/postrm.d/initramfs-tools
/etc/wireshark/init.lua

根据文件名全名查找,如果不是全名可以使用通配符*或?

 

find -nogroup -nouser

$ find /etc -nogroup -nouser
$ 

查找没群组没用户的文件,此处木有

 

find -size

$ find /etc/ -size +1M
/etc/brltty/zh-tw.ctb
/etc/skel/.mozilla/firefox/mwad0hks.default/places.sqlite
/etc/skel/.config/chromium/Safe Browsing Bloom

查找指定单位大小的文件,默认的单位是512字节的数据块block,很不方便

此处以M为单位,查找大于1M的文件

 

示例2 (以时间查找)

find -mmin

$ find /etc -mmin -120 
/etc/cups
/etc/cups/subscriptions.conf.O
/etc/cups/subscriptions.conf

查找两个小时内被修改过内容的文件

 

find -mtime

$ find /etc -mtime -2
/etc
/etc/mtab
/etc/update-motd.d/10-help-text
/etc/gnome/defaults.list
/etc/cups

查找两天内被修改过内容的文件

 

示例3 (以文件类型查找)

find -type

$ find /etc -type d
/etc
/etc/at-spi2
/etc/purple
/etc/ndiswrapper
/etc/init
/etc/ImageMagick
/etc/gnome-app-install

查找/etc目录下文件类型是目录的文件

Tips:Linux中的一切都是文件,包括目录

 

示例4 (连接符)

-a    逻辑与

$ find /etc -name init* -a -type f
/etc/initramfs-tools/initramfs.conf
/etc/bash_completion.d/initramfs-tools
/etc/kernel/postinst.d/initramfs-tools
/etc/kernel/postrm.d/initramfs-tools
/etc/wireshark/init.lua

查找/etc目录下名为init开头并且文件类型是普通的文件

 

-p   逻辑或

$ find /etc -name system -o -name init
/etc/init
/etc/apparmor/init
/etc/systemd/system

查看/etc目录下名为system或init的文件

 

find -exec

$ find /etc -name system -exec ls -l {} \;
总用量 4
drwxr-xr-x 2 root root 4096 12月  9 21:49 multi-user.target.wants

查找名为system的文件并使用ls -l显示其详细信息

 

find -ok

$ ls -i
672684 aa
$ find ./ -inum 672684 -ok rm {} \;
< rm ... ./aa > ? y
$ ls -i
$ 

在本目录下查找指定节点的文件,并询问是否删除

Tips:-ok和-exec不一样的地方就是,一个询问后执行,另一个直接执行

          假如部分Linux发行版设置了别名rm=‘rm -i’,那么此处 \ 转义符可还原rm本身的命令,此处是固定用法,潜规则

 

 

Tips

1.find命令异常强大,可以设置很多限制条件进行搜索,具体查看man页

2.使用find命令最好先指定查找范围,范围越小越好。同时,条件越精确效率越高

 

 

posted @ 2013-01-10 18:23  Nerxious  阅读(1109)  评论(0编辑  收藏  举报