`
feitu_jeff
  • 浏览: 42498 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于xargs,-exec区别及find一般使用 [转载]

 
阅读更多

xargs和-exec
在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

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

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。

下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
#find . -type f -print | xargs file
./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
./.kde/Autostart/.directory: ISO-8859 text
......

在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
上面这个执行太慢,我改成在当前目录下查找
#find . -name "file*" -print | xargs echo "" > /temp/core.log
# cat /temp/core.log
./file6

在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
# ls -l
drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
# find . -perm -7 -print | xargs chmod o-w
# ls -l
drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf

用grep命令在所有的普通文件中搜索hostname这个词:
# find . -type f -print | xargs grep "hostname"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your

用g r e p命令在当前目录下的所有普通文件中搜索hostnames这个词:
# find . -name * -type f -print | xargs grep "hostnames"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
注意,在上面的例子中, 用来取消find命令中的*在s h e l l中的特殊含义。

过滤出大小为0的文件,并将它们删除

# find . -size 0 | xargs rm -f
或者
# find . -size 0 -exec rm -f {} \;


-exec rm {} \; 相当于 rm -f 文件名1 文件名2 文件名3 (只调用了一次rm命令)
xargs rm -f 
相当于 rm -f 文件名1; rm -f 文件名2; rm -f 文件名3 (调用了三次rm命令,这样效率更高)


find命令一般使用

下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看其它find的命令手册

a.使用name选项
文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。
可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。
不管当前路径是什么,如果想要在自己的根目录$ H O M E中查找文件名符合* . t x t的文件,使用~作为' p a t h n a m e参数,波浪号~代表了你的$ H O M E目录。
$ find ~ -name "*.txt" -print
想要在当前目录及子目录中查找所有的‘ * . t x t’文件,可以用:
$ find . -name "*.txt" -print
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
$ find . -name "[A-Z]*" -print
想要在/ e t c目录中查找文件名以h o s t开头的文件,可以用:
$ find /etc -name "host*" -print
想要查找$ H O M E目录中的文件,可以用:
$ find ~ -name "*" -print 或find . -print
要想让系统高负荷运行,就从根目录开始查找所有的文件。
$ find / -name "*" -print
如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是. t x t的文件,下面的命令就能够返回名为a x 3 7 . t x t的文件:
$find . -name "[a-z][a-z][0--9][0--9].txt" -print

b.用perm选项
按照文件权限模式用- p e r m选项。
按文件权限模式来查找文件的话。最好使用八进制的权限表示法。
如在当前目录下查找文件权限位为7 5 5的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:
$ find . -perm 755 -print
还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666

# find . -perm 006
# find . -perm -006

c.忽略某个目录
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用- p r u ne选项来指出需要忽略的目录。在使用-
p r u n e选项时要当心,因为如果你同时使用了- d e p t h选项,那么- p r u ne选项就会被find命令忽略。
如果希望在/ a p p s目录下查找文件,但不希望在/ a p p s / b i n目录下查找,可以用:
$ find /apps -path "/apps/bin" -prune -o -print

避开多个文件夹
find /usr/sam ( -path /usr/sam/dir1 -o -path /usr/sam/file1 ) -prune -o -print
圆括号表示表达式的结合。
表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
查找某一确定文件,-name等选项加在-o 之后
代码
#find /usr/sam (-path /usr/sam/dir1 -o -path /usr/sam/file1 ) -prune -o -name "temp" -print

 

转载:      http://blog.sina.com.cn/s/blog_44c831df0100lebg.html

 

http://blog.microsuncn.com/?p=2071

分享到:
评论

相关推荐

    Linux文件查找命令find,xargs详述

    文章主要对Linux文件查找命令find和xargs进行详细描述,感性趣的朋友可以参考下。

    shell-find和xargs详述.txt

    shell-find和xargs详述.txt shell-find和xargs详述.txt

    linux find命令之xargs简单概述

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是...

    Linux常用命令_MbyW.xls

    "find / -name walter find /home -amin -10 十分钟内访问过的文件 find /home -atime -10 十天内访问过的文件 find /home -cmin -10 十分钟内修改过的文件 find /home -ctime +10 十天内被改过、新增的文件 find /...

    python怎么删除缓存文件

    首先输入“find.-name ‘__pycache__’ -type d -exec rm -rf {} \”命令删除所有子目录; 然后输入“find.-name “*.pyc””命令删除.pyc文件即可。 删除当前目录下的所有__pycache__子目录 find . -name '__...

    关于find命令-各种运用示例

    1、find命令的一般形式为; 2、find命令的参数; 3、find命令选项; 4、使用exec或ok来执行shell命令; 二、find命令的例子; 1、查找当前用户主目录下的所有文件; 2、为了在当前目录中文件属主具有读、写权限,...

    xalanjava源码-xmlgraphics-mavenized:Fop、xmlcommons和batikmavenized(WIP!)

    xargs -i{} cp --parents {} ../resources $ find -type f -not -name 'package.html' -not -name 'overview.html' -not -name '*.java' -exec rm {} \; 用 JRE 提供的默认实现替换了对 Xalan 和 Xerces 的依赖 Java...

    Linux中find命令的用法入门

    find pathname -options [-print -exec -ok …] 介绍一种简单易记的格式: find <指定目录> <指定条件> <指定动作> 动作参数 1、-exec 命令名称 {} \; 对符合条件的文件执行所给的 unix 命令,而不询问...

    Linux 删除特殊字符文件名或目录的方法

    find ./ -size 0 -exec rm {} \; 删除当前目录下文件大小为零的文件(子目录不删除) find ./ -maxdepth 1 -empty -type f -print -delete #-maxdepth 指定目录层级 总结 以上所述是小编给大家介绍的Linux 删除

    Linux下正确快速删除海量文件的方法分享

    前言 注意本文说的“海量”并不是指体积大,而是指数量,比如一个目录下有数百万个小文件。...find /path/to/directory -type f -exec rm {} \; 第二种: ls -1 /path/to/directory | xargs -I{} rm

    hass-roborock

    adb exec-out run-as com.roborock.smart find /data/data/com.roborock.smart/files/rr_cache/ | egrep rr_tuya_[0-9] | xargs -n1 adb exec-out run-as com.roborock.smart cat > roborock_details.gz ...

    dotfiles:Linux应用程序的配置

    点文件 linux应用程序的配置文件 先决条件 管理 stow --target " ${HOME} " --stow user ...find " ${HOME} /.config " -xtype l -exec rm {} + 检查shell脚本 find . -name \* .sh | xargs shellcheck

    Linux指令3-文件搜索(history,find,whereis,which,man)

    2.find:查找文件的命令。经常用。 -type:查找文件的类型 d: 目录 c: 字型装置文件 b: 区块装置文件 p: 具名贮列 f: 一般文件 l: 符号连结 s: socket -atime n : 在过去n天内被读取过的文件(类似还有很多,用到再说...

    labs.projektemacher.org

    实验室结帐主题git submodule initgit submodule update --recursive设置本地(离线)开发运行以下脚本以生成资产./scripts/setup.sh生成磁贴我们开始使用[LibVIPS] ,因为它非常快: 在Mac OS X上,只需运行: brew...

    reggie:快速而肮脏的正则表达式复制命令

    懒得查找find -exec或xargs的语法? 雷吉不在乎。 用法 reggie "(jpg|mov)" ~/mystuff /mnt/backup/mystuff 选项 试运行:不要实际复制文件 详细:打印找到的所有文件的名称 前任: reggie --dry-run --verbose ...

    LINUX与UNIX SHELL编程指南

    第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间...

    Linux shell 编程

    第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 ...

    Linux下正确删除海量文件的姿势

    这里说的“海量”并不是指体积大,而是指数量,比如一个目录下有数百万个小文件。  近在优化服务器时发现...  find /path/to/directory -type f -exec rm {} ;  第二种:  ls -1 /path/to/directory | xargs

    线性规划的matlab代码-software_engineering:这是与深度学习相关的软件工程的仓库

    线性规划的matlab代码 software_engineering This is the repo ...in/xargs/find -exec 1.1.5 监测系统:w/bmon/iostat/iotop 1.1.6 misc:ln/export/实时设置变量/source/chmod/chown/#!/sshpass/

Global site tag (gtag.js) - Google Analytics