天天看点

Linux命令(三)find,xargs1.find2.xargs

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

1.find

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

格式:

默认路径是在当前目录,打印信息用-print

expression包含几个因素:操作,操作数,测试表达式,动作

parameter function
-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的文件的信息

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

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

-print可以不要,结果一样的

Linux命令(三)find,xargs1.find2.xargs

5.按文件类型查找文件

查找普通文件

补充知识: 关于文件的类型如下:

parameter function
-f 普通文件
-l symbolic link file符号链接文件
-d directory 目录

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

find -atime -2
           

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

find /home/ling -perm 777
           

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

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

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

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

find . -type f -user  root
           

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

注意777不可写成"777"

(待完成:准备文件时,修改权限无效的解决办法)

1.2 查找后执行命令 -exec

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

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

**备注:**2天以内的用-2

3.在目录中查找更改时间在2日以前的文件并删除它们,在删除之前先给出提示

-ok是-exec的安全模式,每次执行前都会提示

4.-exec中使用grep命令,先匹配所有文件名为“ passwd*”的文件,例如passwd、

passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个root用户

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

6.用exec选项执行cp命令

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

注意指令和其他符号之间要有间隔,比如cat 和{}之间,不然就会被识别成一串的

8.当命令行较多时可以将exec脚本放入文件,然后执行文件。请写出找到当前所有的.c文件后,打印第一个文件,并将它合并到all.c,打印并合并的操作放到当前目录下command.sh的文件里的操作

command.sh的内容:

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

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

$1代表第一行

2.xargs

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

格式:

parameter function
n 一行最多打印几个字
d 寻找分割符,相当于java String 类里的split()

使用例子:

1.将a.tx里的好几行内容变成一行

文件a.txt里的内容:

1 2 3

4 5 6 7

8 9

结果:

Linux命令(三)find,xargs1.find2.xargs

2.将一行变成n行

Linux命令(三)find,xargs1.find2.xargs

3.用i分割开字符串并按每行最多3个打印

Linux命令(三)find,xargs1.find2.xargs

4.查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

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

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

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

6.用grep命令在所有的普通文件中搜索hostname这个词

\是表示转义,用来取消find命令中的*在shell中的特殊含义

7.使用xargs执行mv

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

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

继续阅读