Linux常用命令(五)

Linux常用命令(五)

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

1 exec 命令

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

1.1 语法

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

1.2 命令参数

1.3 命令实例

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

    [[email protected] Test]#
    [[email protected] Test]# ls
    10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log  test11
    [[email protected] 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删除命令
    [[email protected] Test]# ls
    10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log  test11
    [[email protected] Test]# find .  -type f -name "*log"  -exec rm  {} \;
    [[email protected] Test]# ls
    test11
    [[email protected] Test]#


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

    [[email protected] Test]# ls
    10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log  test11
    [[email protected] 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
    [[email protected] Test]# ls
    test11
  1. 查找文件移动到指定目录

    [[email protected] /]# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  Test  tmp  usr  var
    [[email protected] /]# cd Test/
    [[email protected] Test]# ls
    Test01
    [[email protected] Test]# cd Test01/
    [[email protected] Test01]# ls
    10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log
    [[email protected] Test01]# cd ..
    [[email protected] Test]# cd Test01/
    [[email protected] Test01]# find . -name "*.log" -exec mv {} .. \;
    [[email protected] Test01]# ls
    [[email protected] Test01]# cd ..
    [[email protected] Test]# ls
    10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log  Test01
    [[email protected] 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. 定义一个测试文件,内有多行文本数据,变为单行输出

    [[email protected] Test]# cat test.txt
    a 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
    [[email protected] Test]# cat test.txt | xargs
    a 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
    [[email protected] Test]#
  2. 利用-n参数限定xargs每次读取的参数的个数
    [[email protected] Test]# cat test.txt
    a 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
    [[email protected] Test]# cat test.txt | xargs -n3
    a 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
    [[email protected] Test]#
  3. -d 选项可以自定义一个定界符
    # echo "nameXnameXnameXname" | xargs -dX -n2
    name name
    name name
    结合 -n 选项使用:
    # echo "nameXnameXnameXname" | xargs -dX -n2
    name name
    name name
  4. 查找系统中的一个普通文件,用xargs命令测试它的文件类型
    [[email protected] Test]# ls
    10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log
    [[email protected] 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
    [[email protected] Test]# 
  5. 查找当前目录中具有读/写/可执行的文件,并修改相应的权限chmod(该命令后续讲解)
    [[email protected] Test]# ll
    total 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
    [[email protected] Test]# find . -type f -print | xargs chmod 777
    [[email protected] Test]# ll
    total 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命令(管道符后面会有讲解)结合过滤出指定的专有名词
    [[email protected] Test]# ls
    10.log  1.log  2.log  3.log  4.log  5.log  6.log  7.log  8.log  9.log
    [[email protected] Test]# echo ‘shenwei is a good person‘>10.log
    [[email protected] Test]# cat 10.log
    shenwei is a good person
    [[email protected] Test]# find . -type f -print | xargs grep "shen"
    ./10.log:shenwei is a good person
    [[email protected] Test]#

原文地址:https://blog.51cto.com/12002695/2380704

时间: 2024-10-12 07:53:00

Linux常用命令(五)的相关文章

linux常用命令整理(五):shell基础

大家好,我是会唱歌的程序猿------ 最近在学习linux,闲暇之余就把这些基本的命令进行了整理,希望大家能用的上,整理的的目的是在忘了的时候翻出来看看^?_?^,前后一共分为五个部分: linux基本命令整理(一):常用命令 地址:http://www.cnblogs.com/devinCat/p/7247824.html linux基本命令整理(二):用户.用户组.文件系统和网络 地址:http://www.cnblogs.com/devinCat/p/7247847.html linux

(转)linux常用命令

原地址:http://www.cnblogs.com/svage/p/3700122.html 1.删除目录及子目录下的 .svn目录 find . -type d -name ".svn" | xargs rm -rf 2./tmp 目录的权限 drwxrwxrwt rwt的意思是:对目录有执行权限,但不能删除,即sticky bit rwx : 可读可写可执行 4+2+1 3.改变群组.用户.权限 chgrp   群组名   改变的目录 groupadd -g gid gname

Linux 常用命令汇总

Linux 常用命令汇总 1. 显示日期与时间:date 可修改显示日期格式,如:date +%Y/%m/%d %H:%M à2016/12/25 17:05(%Y:年:%m:月:%d:日:%H:24小时制:%M:分) date –d 参数后可加:today/yesterday/tomorrow 来显示今天.昨天.明天日期 2. 显示日历:cal(默认显示本月月历) cal 2001 可显示2001年整年日历:cal 10 2001 可具体显示某月月历 3.  计算器:bc 4. Tab键:用在

linux常用命令整理(四):软件包管理和shell基础

大家好,我是会唱歌的程序猿------ 最近在学习linux,闲暇之余就把这些基本的命令进行了整理,希望大家能用的上,整理的的目的是在忘了的时候翻出来看看^?_?^,前后一共分为五个部分: linux基本命令整理(一):常用命令 地址:http://www.cnblogs.com/devinCat/p/7247824.html linux基本命令整理(二):用户.用户组.文件系统和网络 地址:http://www.cnblogs.com/devinCat/p/7247847.html linux

linux常用命令cd&ls&PATH

一.cd 命令cd--change directory即变换目录. cd 绝对路径或相对路径 cd ~用户 表示到这个用户的家目录,即/home/用户 cd ~表示回到自己的家目录,即/root这个目录 cd 表示回到自己的家目录 cd .. 表示回到上次目录 二.ls命令 ls--list即列出当前目录下的文件. ls -l表示列出文件的长数据串行,包含属性和权限等数据(常用) ls -a表示列出全部文件,连同隐藏(开头为.)一起列出 ls -A表示列出全部文件,连同隐藏,但不包括.和..这两

Linux常用命令之一:find

Linux常用命令之一:find find,find在不指定查找目录的情况下是对整个系统进行遍历查找 使用格式 :   find  [指定查找目录]  [查找规则]  [查找完后执行的action] [指定查找目录]例如: [[email protected] ~]# find/etc -name "passwd" /etc/passwd /etc/pam.d/passwd [查找规则] (1)根据文件名查找 #  -name       //根据文件名查找(精确查找) #  -ina

Linux常用命令速查备忘

Linux常用命令速查备忘 PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown] 停止系统 [halt] 停止系统 [reboot] 重启动 [poweroff] 切断电源 [sync] 把内存里的内容写入磁盘 [lilo] 安装lilo启动管理程序 [grub] 安装lilo启动管理程序 二. Shell相关命令 [chsh] 切换Shell [history] 显示命令履历

Linux(二)Linux常用命令

Linux常用命令 一 .linux命令的格式 1.命令 [选项] [参数] ls list 显示目录下内容 ① 命令名称:ls 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 功能描述:显示目录文件 ② ls 名直接回车,显示目录下内容 ls -l 长格式显示 (缩略选项用一个减号,完整选项用两个减号) -rw------- 1 root root 1190 08-10 23:37 anaconda-ks.cfg 第一项:-rw------- 权限位 第二项: 1 引

Linux常用命令大全(全面)

笔者在这篇文章中跟大家分享一下接近 100 个 Linux 常用命令大全,希望可以帮助到大家. 1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和".." -l 列出文件的详细信息 -c 根据ctime排序显示 -t 根据文件修改时间排序 ---color[=WHEN] 用色彩辨别文件类型 WHEN 可以是'ne