在shell编程中常常需要来查找文件,并对文件进行处理
find
find 的参数有很多,就不一一列举,主要写了几个常用参数
-name 根据文件名来查找
-perm 根据文件权限来查找
-user 根据文件的所有者
-type 根据文件类型来查找
用法示例
-name1
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换成okfind . -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