博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux常用命令(五)
阅读量:6705 次
发布时间:2019-06-25

本文共 5542 字,大约阅读时间需要 18 分钟。

Linux常用命令(五)

今天,我们继续总结linux的find命令,find命令经常与另外两个命令exec和xargs一起使用,那么今天我们就看看他们到底是怎么使用的吧。

1 exec 命令

-exec参数后面跟的是command命令,以‘;’为结束标志,并且要在‘;’之前增加‘\’,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。

1.1 语法

find[文件目录]... -exec [commond] {} \;

1.2 命令参数

1.3 命令实例

  1. 用-exec选项执行ls命令

    [root@ERICSSON Test]#[root@ERICSSON Test]# ls10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log  test11[root@ERICSSON Test]# find .  -type f -name "*log"  -exec ls -ld {} \;-rw-r--r--. 1 root root 0 Apr 18 11:40 ./1.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./2.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./3.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./4.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./5.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./6.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./7.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./8.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./9.log-rw-r--r--. 1 root root 0 Apr 18 11:40 ./10.log
  2. 在目录中查找目标文件并用-exec选项执行rm删除命令

    [root@ERICSSON Test]# ls10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log  test11[root@ERICSSON Test]# find .  -type f -name "*log"  -exec rm  {} \;[root@ERICSSON Test]# lstest11[root@ERICSSON Test]#

note: 运用rm命令时一定要小心 最好使用交互模式 增加参数-i

[root@ERICSSON Test]# ls    10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log  test11    [root@ERICSSON Test]# find .  -type f -name "*log"  -exec rm -i {} \;    rm: remove regular empty file ‘./1.log’? y    rm: remove regular empty file ‘./2.log’? y    rm: remove regular empty file ‘./3.log’? y    rm: remove regular empty file ‘./4.log’? y    rm: remove regular empty file ‘./5.log’? y    rm: remove regular empty file ‘./6.log’? y    rm: remove regular empty file ‘./7.log’? y    rm: remove regular empty file ‘./8.log’? y    rm: remove regular empty file ‘./9.log’? y    rm: remove regular empty file ‘./10.log’? y    [root@ERICSSON Test]# ls    test11
  1. 查找文件移动到指定目录

    [root@ERICSSON /]# lsbin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  Test  tmp  usr  var[root@ERICSSON /]# cd Test/[root@ERICSSON Test]# lsTest01[root@ERICSSON Test]# cd Test01/[root@ERICSSON Test01]# ls10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log[root@ERICSSON Test01]# cd ..[root@ERICSSON Test]# cd Test01/[root@ERICSSON Test01]# find . -name "*.log" -exec mv {} .. \;[root@ERICSSON Test01]# ls[root@ERICSSON Test01]# cd ..[root@ERICSSON Test]# ls10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log  Test01[root@ERICSSON Test]#

2 xargs 命令

xargs命令相对于exec命令由两大优势。

其一,xargs相对于exec命令是分段处理一部分文件在继续进行运行,而不像exec一样执行全部文件,在有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。

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

2.1 语法

somecommand |xargs -item  command

2.2 命令参数

-a file 从文件中读入作为sdtin-p 当每次执行一个argument的时候询问一次用户。-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。-t 表示先打印命令,然后再执行。-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。-L num 从标准输入一次读取 num 行送给 command 命令。-l 同 -L。-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。

2.3 命令实例

  1. 定义一个测试文件,内有多行文本数据,变为单行输出

    [root@ERICSSON Test]# cat test.txta b c d e f gh i j k l m no p qr s tu v w x y z[root@ERICSSON Test]# cat test.txt | xargsa b c d e f g h i j k l m n o p q r s t u v w x y z[root@ERICSSON Test]#
  2. 利用-n参数限定xargs每次读取的参数的个数

    [root@ERICSSON Test]# cat test.txta b c d e f gh i j k l m no p qr s tu v w x y z[root@ERICSSON Test]# cat test.txt | xargs -n3a b cd e fg h ij k lm n op q rs t uv w xy z[root@ERICSSON Test]#
  3. -d 选项可以自定义一个定界符

    # echo "nameXnameXnameXname" | xargs -dX -n2    name namename name结合 -n 选项使用: # echo "nameXnameXnameXname" | xargs -dX -n2name namename name
  4. 查找系统中的一个普通文件,用xargs命令测试它的文件类型

    [root@ERICSSON Test]# ls10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log[root@ERICSSON Test]# find .  -type f -print | xargs file./1.log:  empty./2.log:  empty./3.log:  empty./4.log:  empty./5.log:  empty./6.log:  empty./7.log:  empty./8.log:  empty./9.log:  empty./10.log: ASCII text[root@ERICSSON Test]#
  5. 查找当前目录中具有读/写/可执行的文件,并修改相应的权限chmod(该命令后续讲解)

    [root@ERICSSON Test]# lltotal 4-rw-r--r--. 1 root root 8 Apr 18 14:25 10.log-rw-r--r--. 1 root root 0 Apr 18 12:04 1.log-rw-r--r--. 1 root root 0 Apr 18 12:04 2.log-rw-r--r--. 1 root root 0 Apr 18 12:04 3.log-rw-r--r--. 1 root root 0 Apr 18 12:04 4.log-rw-r--r--. 1 root root 0 Apr 18 12:04 5.log-rw-r--r--. 1 root root 0 Apr 18 12:04 6.log-rw-r--r--. 1 root root 0 Apr 18 12:04 7.log-rw-r--r--. 1 root root 0 Apr 18 12:04 8.log-rw-r--r--. 1 root root 0 Apr 18 12:04 9.log[root@ERICSSON Test]# find . -type f -print | xargs chmod 777[root@ERICSSON Test]# lltotal 4-rwxrwxrwx. 1 root root 8 Apr 18 14:25 10.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 1.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 2.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 3.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 4.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 5.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 6.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 7.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 8.log-rwxrwxrwx. 1 root root 0 Apr 18 12:04 9.log
  6. 与grep命令(管道符后面会有讲解)结合过滤出指定的专有名词

    [root@ERICSSON Test]# ls10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log[root@ERICSSON Test]# echo 'shenwei is a good person'>10.log[root@ERICSSON Test]# cat 10.logshenwei is a good person[root@ERICSSON Test]# find . -type f -print | xargs grep "shen"./10.log:shenwei is a good person[root@ERICSSON Test]#

转载于:https://blog.51cto.com/12002695/2380704

你可能感兴趣的文章
Uber 开源地理可视化工具 Ketoper.gl,加速数据处理
查看>>
NSDate格式化小例
查看>>
运维不容错过的4个关键指标!
查看>>
spring 基础
查看>>
商品详情页上拉查看详情
查看>>
Kubernetes DNS服务简介
查看>>
「压缩」会是机器学习的下一个杀手级应用吗?
查看>>
IIS应用程序池_缓存回收
查看>>
使用Docker镜像和仓库
查看>>
二叉树
查看>>
springcloud(一):大话Spring Cloud
查看>>
Linux之父道歉后,Linux社区颁布开发人员行为准则
查看>>
map 遍历
查看>>
当人工智能遇到数字营销,阿里妈妈在云栖大会亮出了Ad Tech的名片
查看>>
导入依赖导致的重复引用不同版本的相通类的问题
查看>>
Android 单例模式的正确姿势
查看>>
SD-CORE ——如何在没有MPLS的情况下构建全球企业级SD-WAN
查看>>
Linux Debug tools
查看>>
“重要的事情说三遍”,你真的会说吗?
查看>>
Spring Boot 使用 Zuul 开发 API Gateway
查看>>