Linux命令(三)find,xargs

您所在的位置:网站首页 破组四字词语有哪些 Linux命令(三)find,xargs

Linux命令(三)find,xargs

#Linux命令(三)find,xargs| 来源: 网络整理| 查看: 265

本篇记录2个命令,分别是:find,xargs

1.find

作用: 按文件结构遍历搜素,找到符合条件的文件并按照相应的操作来展现 格式:

find option [expression]

默认路径是在当前目录,打印信息用-print expression包含几个因素:操作,操作数,测试表达式,动作

parameterfunction-name按名称寻找文件-exec找到文件后再执行exec命令后面的操作-type按类型查找文件-print输出找到的文件的信息-user按所有者(文件的主人)来查找文件-mtime -n +n根据修改时间找到文件 1.1按普通的条件查找

使用例子: 1.打印当前路径下的文件的信息,只打印前十条

find . -print |head -10

2.打印当前路径下以.txt结尾的文件的信息

find . -name "*.txt" -print |head -10

这里不用type,因为type是关于帮助文件,可执行文件之类的定义的,跟pdf,txt这种文件类型不一样,在详细信息中可以找到 3.打印当前路径下以.txt结尾或者以.pdf的文件的信息

find . \ (-name "*.txt" -or -name "*.pdf" \)

4.打印当前路径下除了以.txt结尾的文件的信息

find . ! -name "*.txt" -print |head -10

-print可以不要,结果一样的 在这里插入图片描述 5.按文件类型查找文件

find -type f -name "*.txt"

查找普通文件 补充知识: 关于文件的类型如下:

parameterfunction-f普通文件-lsymbolic link file符号链接文件-ddirectory 目录

6.按修改时间查找文件,超找48小时内修改过的文件

find -atime -2

7.按照目录和文件权限来查找文件,查找/home/ling目录下 权限为 777的文件

find /home/ling -perm 777

8.打印当前目录下所有以txt结尾的符号链接文件

find . -type l -name "*.txt"

8.打印当前目录下所有以php结尾的,权限是777的普通文件

find . -type f -name "*.php" -perm 777

9.打印当前目录下所有root持有的文件

find . -type f -user root

10.打印当前目录下所有权限不是777也不是644的普通文件

find . -type f \(!-perm 777 -and !-perm 644\)

注意777不可写成"777" (待完成:准备文件时,修改权限无效的解决办法)

1.2 查找后执行命令 -exec

1.ls -l命令放在find命令的-exec选项中

find . -exec ls -l {}\;

2.在目录中查找更改时间在2日以前的文件并删除它们

find . -type f-mtime +2 -exec rm {}\;

**备注:**2天以内的用-2 3.在目录中查找更改时间在2日以前的文件并删除它们,在删除之前先给出提示

find . -etime -2 -ok -i {}\;

-ok是-exec的安全模式,每次执行前都会提示 4.-exec中使用grep命令,先匹配所有文件名为“ passwd*”的文件,例如passwd、 passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个root用户

find . -name "passwd*" -exec grep "root" {}\;

5.查找文件移动到指定目录home/ling

find . -exec mv {} home/ling\;

6.用exec选项执行cp命令

find . -name "*.log" -exec cp {} home/ling \;

7.将所有.c文件中的代码合并到all.c

find . -name "*.c" -exec cat {} \;> all.c\;

注意指令和其他符号之间要有间隔,比如cat 和{}之间,不然就会被识别成一串的 8.当命令行较多时可以将exec脚本放入文件,然后执行文件。请写出找到当前所有的.c文件后,打印第一个文件,并将它合并到all.c,打印并合并的操作放到当前目录下command.sh的文件里的操作

find . -name "*.c"-exec |commmand.sh\;

command.sh的内容:

#! /bin/sh ls -l $1 cat $1

第一行是sh文件开头必须写的,用来告诉系统需要什么程序执行 $1代表第一行

2.xargs

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

xargs [option] parameterfunctionn一行最多打印几个字d寻找分割符,相当于java String 类里的split()

使用例子: 1.将a.tx里的好几行内容变成一行 文件a.txt里的内容: 1 2 3 4 5 6 7 8 9

cat a.txt | xargs

结果: 在这里插入图片描述

2.将一行变成n行 在这里插入图片描述 3.用i分割开字符串并按每行最多3个打印 在这里插入图片描述 4.查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

find . -type f -print | xargs file

5.在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限

find . -perm -7 -print | xargs chmod o-w

使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[] 6.用grep命令在所有的普通文件中搜索hostname这个词

find . -name \* -type f -print | xargs grep "hostnames"

\是表示转义,用来取消find命令中的*在shell中的特殊含义 7.使用xargs执行mv

find . -name "*.log" | xargs -i mv {} test4

使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如下面例子中的[]

find . -name "file" | xargs -I [] cp [] ..


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3