shell--find用法

在shell编程中常常需要来查找文件,并对文件进行处理
find
find 的参数有很多,就不一一列举,主要写了几个常用参数
-name 根据文件名来查找
-perm 根据文件权限来查找
-user 根据文件的所有者
-type 根据文件类型来查找

用法示例

-name

1
2
3
4
#查找家目录下所有的*.txt文件
find ~ -name "*.txt" -print
#查找当前目录下的所有*.txt文件
find . -name "*.txt" -print

-perm
一般来说,为了系统安全,查找777权限的文件
find / -perm 777 -print

-user
查找当前目录下的所有属于root的所有文件
find . -user root -print

-type
文件类型主要有
b 块设备文件
d 目录
c 字符设备文件
p 管道文件
l 符号链接文件
f 普通文件
查找当前目录下的所有目录文件
find . -type d -print


find 的重要参数-exec 和ok
exec 和ok基本功能一样,所以以exec来看

-exec是对已经查找的文件进行操作,比如ls,cp,mv,rm之类的命令,
当然比如rm是比较危险操作,有可能删除的文件并不是你所要删除的
所以呢,这个时候ok就出来了,每执行一次,都会要用户手动确认的
继续来看-exec的用法

用法示例
将当前目录下的所有的权限为777的文件删除
find . -perm 777 -exec rm -rf {} \;
如果希望手动确认,把exec换成ok
find . -perm 777 -ok rm -rf {} \;

-exec是把得到的结果一条一条地执行下去,那么问题来了
如果把所得到的结果都打包到一个tar包下面,该怎么办?
可以用 $(find XXX)

把当前目录下的所有.c文件打包压缩到c_source.tar.gz下
tar czvpf c_source.tar.gz $(find . -name "*.c")


find的另外一个组合就是xargs
-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到
的文件全部作为参数一次执行;这样在有些情况下就会出先进程过多,系统性能
下降问题,因而效率不高;而使用xargs只有一个进程

xargs的使用例子

查看根下的所有普通文件的文件类型
find / -typd f -print | xargs file

Contents
  1. 1. 用法示例
,