正在加载中……
最新消息:欢迎大家访问,导航分类不完善,如果找不到自己想要的文章,可以通过【关键词】来进行搜索,^_^!

Linux学习笔记_Find常见用法(exec,xargs)及示例

Linux专题 REKFAN.COM 10265浏览 0评论

更多


Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
/--------------------------------------------------------------
find命令的参数:
--------------------------------------------------------------/
path: find命令所查找的目录路径。例如:用.来表示当前目录,用/来表示系统根目录。
-print:find命令将匹配的文件输出到标准输出。
-exec :find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;
注意:{ }和\;之间的空格。
-ok:和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

====================================================
-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        #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f   #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size    n[c]          #查长度为n块[或n字节]的文件
-depth                 #使查找在进入子目录前先行查找完本目录
-fstype                #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                 #查文件时不跨越文件系统mount点
-follow                #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio    %;            #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                 #查文件时不跨越文件系统mount点
-follow                #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                  #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                 #忽略某个目录
http://blog.rekfan.com/?p=245
====================================================
#find ~ -name "*.txt" -print    #在$HOME中查.txt文件并显示
#find . -name "*.txt" -print    #在当前目录中查.txt文件并显示
#find . -name "[A-Z]*" -print   #查以大写字母开头的文件
#find -name april*                     #在当前目录下查找以april开始的文件
#find -name april* fprint file         #在当前目录下查找以april开始的文件,并把结果输出到file中
#find -name ap* -o -name may*          #查找以ap或may开头的文件
#find /etc -name "host*" -print #查以host开头的文件
#find . -name "[a-z][a-z][0–9][0–9].txt" -print   #查以两个小写字母和两个数字开头的txt文件
#find /home -name tmp.txt -maxdepth 4  #列出/home内的tmp.txt 查时深度最多为3层
#find /home -name tmp.txt -mindepth 3  #从第2层开始查
查找2004-11-30 16:36:37时更改过的文件
# A=`find ./ -name "*php"` |   ls -l –full-time $A 2>/dev/null | grep "2004-11-30 16:36:37"

#find . -perm 755 -print
#find . -perm -007 -exec ls -l {} \;   #查所有用户都可读写执行的文件同-perm 777

#find /home -used -2                   #列出文件或目录被改动过之后,在2日内被存取过的文件或目录
#find /home -user rekfan               #列出/home目录内属于用户rekfan的文件或目录
#find /home -uid +501                  #列出/home目录内用户的识别码大于501的文件或目录
#find /home -group rekfan              #列出/home内组为rekfan的文件或目录
#find /home -gid 501                   #列出/home内组id为501的文件或目录
#find /home -nouser                    #列出/home内不属于本地用户的文件或目录
#find /home -nogroup                   #列出/home内不属于本地组的文件或目录

#find / -amin -10      # 查找在系统中最后10分钟访问的文件
#find / -atime -2      # 查找在系统中最后48小时访问的文件
#find / -empty         # 查找在系统中为空的文件或者文件夹
#find / -group cat     # 查找在系统中属于 groupcat的文件
#find / -mmin -5       # 查找在系统中最后5分钟里修改过的文件
#find / -mtime -1      # 查找在系统中最后24小时里修改过的文件
#find / -nouser        # 查找在系统中属于作废用户的文件
#find / -user fred     # 查找在系统中属于FRED这个用户的文件
#find /home -mtime -2                  #在/home下查最近两天内改动过的文件
#find /home -atime -1                  #查1天之内被存取过的文件
#find /home -mmin +60                  #在/home下查60分钟前改动过的文件
#find /home -amin +30                  #查最近30分钟前被存取过的文件

#find /home -newer tmp.txt             #在/home下查更新时间比tmp.txt近的文件或目录
#find /home -anewer tmp.txt            #在/home下查存取时间比tmp.txt近的文件或目录

#find . -type d -print
#find . ! -type d -print
#find . -type l -print
#find /mnt -name tom.txt -ftype vfat   #在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
#find /mnt -name t.txt ! -ftype vfat   #在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
#find /tmp -name wa* -type l           #在/tmp下查找名为wa开头且类型为符号链接的文件

#find . -size +1000000c -print  #查长度大于1Mb的文件
#find . -size 100c -print       # 查长度为100c的文件
#find . -size +10 -print        #查长度超过期作废10块的文件(1块=512字节)
#find /home -empty                     #查找大小为0的文件或空目录
#find /home -size +512k                #查大于512k的文件
#find /home -size -512k                #查小于512k的文件
#find /home -links +2                  #查硬连接数大于2的文件或目录
#find /home -perm 0700                 #查权限为700的文件或目录

#cd /
#find etc home apps -depth -print | cpio -ivcdC65536 -o /dev/rmt0

#find dir -name filename -print | cpio -pdv newdir

/--------------------------------------------------------------
Linux下find + exec的用法
--------------------------------------------------------------/
Linux的find与exec结合,功能强大
例子:
find . -name "*aa*" -exec cp -r {} destpath \;
解释:这个命令会把所有名字包含aa的文件拷贝到destpath目录下
用法:
find . -name "*something*" -exec action {} somearguments \;
详细解释
find . -name "*something*"  找出所有名字包含something的文件
-exec 执行后面的命令, action 某个命令名,就是例子中的cp, {}是find的结果集合,
somearguments , 命令需要的参数,就是例子中的-r,   \; 结束命令
/--
------------------------------------------------------------
Linux下find + exec的常见例子:
--------------------------------------------------------------/
查当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出
# find . -type f -exec ls -l {} \;
-rw-r–r–    1 root      root         34928 2003-02-25   ./conf/httpd.conf
-rw-r–r–    1 root      root         12959 2003-02-25   ./conf/magic
-rw-r–r–    1 root      root          180 2003-02-25   ./conf.d/README

在/logs目录中查找更改时间在5日以前的文件并删除它们:
# find logs -type f -mtime +5 -exec -ok   rm {} \;

查询当天修改过的文件
# find ./ -mtime -1 -type f -exec ls -l {} \;

在/logs目录中查找更改时间在5日以前的文件并删除它们:
# find logs -type f -mtime +5 -exec -ok rm {} \;

查询当天修改过的文件
# find ./ -mtime -1 -type f -exec ls -l {} \;

将.c后缀find出来的东西拷到/tmp文件夹
#find *.c -exec cp ‘{}’ /tmp ‘;’

查找当前目录中大于3M的文件:
#find . -size +3000k -exec ls -ld {} ;

看是否存在rekfan用户
#find /etc -name "passwd*" -exec grep "rekfan" {} \;  

查询文件并询问是否要显示
[root@rekfan phpcms]# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? y
-rw-r–r–  1 rekfan  rekfan    13709   1月 12 12:22 ./classDB.inc.php
[root@rekfan phpcms]# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? n
[root@rekfan phpcms]#

/--------------------------------------------------------------
Linux下find + xargs 的用法
--------------------------------------------------------------/
在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。不幸的是,有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。Find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
/--------------------------------------------------------------
Linux下find + xargs 的例子
--------------------------------------------------------------/
下面的例子在/apps/audit目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
$ find /apps/audit -perm -7 -print | xargs chmod o-w
在下面的例子中,我们用grep命令在所有的普通文件中搜索device这个词:
$ find / -type f -print | xargs grep "device"
在下面的例子中,我们用grep命令在当前目录下的所有普通文件中搜索DBO这个词:
$ find . -name *\-type f -print | xargs grep "DBO"
xargs 的-n选项,控制传递给命令的参数个数:比如例子文件批量重命名,批量去掉.txt后缀
ls -l *.txt|awk '{oldname=$8;sub(/.txt$/,"");print oldname,$8 }'|xargs -n2 mv

#find . -name "yao*" | xargs file
#find . -name "yao*" | xargs echo "" > /tmp/core.log
#find . -name "yao*" | xargs chmod o-w
#find . -name .svn | xargs rm -rf

转载请注明:|REKFAN|系统运维| » Linux学习笔记_Find常见用法(exec,xargs)及示例

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址