`
feitu_jeff
  • 浏览: 44568 次
  • 性别: 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详述

    `xargs`命令则常与`find`结合使用,它可以将`find`输出的文件名作为参数传递给其他命令。例如,使用`-exec`删除所有匹配的文件可能需要用户确认,而通过`xargs`传递给`rm`命令则可以直接删除。基本用法如下: ```...

    shell-find和xargs详述.txt

    ### Shell Find 和 Xargs 详述 #### 一、Find 命令详解 ##### 1. Find 命令格式 Find 是 Linux 和 Unix 系统中用于搜索文件的强大工具之一。它允许用户根据多种条件查找文件。其基本语法如下: ```bash find ...

    linux find 命令大全

    - 在处理大量文件时,使用 `-print0` 和 `xargs -0` 可以避免 `find` 命令由于命令行过长而出错。 - 需要注意的是,`find` 命令的执行可能会很慢,特别是当搜索范围较大时。因此,在生产环境中使用时需要谨慎考虑...

    Linux 下xargs命令详解及xargs与管道的区别

    ### Linux 下xargs命令详解及xargs与管道的区别 #### 一、xargs命令简介 在Linux系统中,`xargs`是一个非常实用且强大的命令,它主要用于将标准输入(stdin)中的数据转换为命令行参数,从而可以方便地处理大量...

    Linux_的命令find_xargs详述(1).txt

    ### Linux中的find与xargs命令详解 在Linux系统中,`find` 和 `xargs` 是两个非常重要的命令行工具,它们被广泛用于文件搜索、处理等任务中。本文将详细解析这两个命令的功能、用法及其应用场景。 #### 1. find ...

    unix find命令

    find / -name "web.xml" -type f | xargs grep "10.71.110.89" ``` 这条命令会找到所有名为"web.xml"的文件,并检查它们是否包含"10.71.110.89"这个IP地址。 7. **执行操作** - `-exec command {} \;`:在找到...

    Linux find 命令使用小技巧一则

    这个脚本首先切换到`/dailybuild`目录,然后使用`find`命令找出5天前的子目录,将它们的路径存储在变量`files`中,最后遍历这个列表并使用`rm -rf`删除每个目录。 总结起来,这个技巧展示了如何结合`find`命令的...

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

    关于`find`命令,它是Linux和Unix系统中用于在文件系统中查找文件的强大工具。它提供了多种选项和参数,能够根据文件名、属性、时间戳等条件进行搜索。以下是关于`find`命令的详细说明: ### 一、find命令格式 `...

    find命令调研文档

    使用 `find` 的 `-exec` 或 `-ok` 选项可以方便地执行各种 shell 命令,比如批量重命名文件或删除文件。但是,在执行这些操作之前,最好先使用 `-print` 选项查看匹配的文件列表,以确保正确性。 例如,要删除当前...

    UNIX find命令的使用

    ### UNIX find命令的使用 #### 一、概述 在UNIX系统中,`find`命令是一个极其强大的工具,用于在文件系统中查找文件。通过结合不同的选项和操作符,`find`命令可以执行复杂的搜索任务,比如按名称、类型、大小、...

    Linux常用命令_MbyW.xls

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

    linux - find 命令总结

    `find`命令通常与`xargs`命令结合使用,将找到的文件作为参数传递给其他命令。例如: ```bash find . -name "core" -print | xargs echo "" >/tmp/core.log ``` 这个命令会将所有名为`core`的文件的路径写入到`/tmp...

    Linux文件查找命令find

    `find`命令结合`xargs`使用可以更高效地处理大量文件的查找与操作。在实际应用中,`find`命令的强大功能和灵活性使其成为Linux环境下文件管理和自动化任务处理的利器。通过合理配置选项,可以实现对文件系统的深度...

    Linux操作命令五.doc

    在实际应用中,find 和 xargs 命令经常一起使用。例如,想要搜索当前目录下的所有文件,并将其删除,可以使用以下命令: ``` find . -type f -exec rm {} \; ``` 这将搜索当前目录下的所有文件,并将其删除。 或者...

    python怎么删除缓存文件

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

    Centos 7下的操作命令

    ### CentOS 7 下的 Find 命令详解 #### 一、Find 命令概述 `find` 命令是在 Linux 或类 Unix 操作系统中非常强大的一个工具,用于搜索文件系统中的文件。它提供了多种选项来精确地定位符合特定条件的文件。 #### ...

    Linux Find_命令使用详解

    对于更复杂的操作,推荐使用 `xargs` 命令代替 `exec`,以提高效率和灵活性。 #### 五、总结 `find` 命令是 Linux 系统管理的重要工具之一,掌握其使用方法有助于高效地管理和维护文件系统。无论是简单的文件查找...

    linux shell find从入门到精通

    在本篇文章中,我们将从基础知识开始,深入浅出地介绍 Find 命令的使用方法和高级技巧。 一、通用查找 Find 命令的基本语法是 `find [搜索路径] [搜索条件] [搜索动作]`。其中,搜索路径可以是当前目录(.`),也...

Global site tag (gtag.js) - Google Analytics