Linux操作命令(五)1.find命令 2.xargs命令
1、find命令(一)
find命令用于在指定目录下查找文件或目录
参数 | 描述 |
---|---|
find 命令将匹配的文件输出到标准输出 | |
-exec | find 命令对匹配的文件执行该参数所给出的 shell 命令 |
-name | 按照文件名查找文件 |
-type | 查找某一类型的文件 |
-prune | 使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同时使用 -depth 选项,那么 -prune 将被 find 命令忽略 |
-user | 按照文件属主来查找文件 |
-group | 按照文件所属的组来查找文件 |
-mtime -n +n | 按照文件的更改时间来查找文件,-n 表示文件更改时间距现在小于 n 天,+n 表示文件更改时间距现在大于 n 天,find 命令还有 -atime 和 -ctime 选项 |
打印当前目录下的文件目录列表:find . -print
打印当前目录下所有以.txt 结尾的文件名:find . -name "*.txt" -print;-iname 选项跟-name 选项作用一样,不同的地方在于-iname 会忽略字母大小写
打印当前目录下所有以.txt 或.pdf 结尾的文件名:find . \( -name "*.pdf" -or -name "*.txt" \)
打印当前目录下所有不以.txt 结尾的文件名:find . ! -name "*.txt"
2、find 命令(二)
根据文件类型、权限、所有者及操作符来查找匹配文件
根据文件类型来查找文件,使用 -type 选项,常见 find 文件类型见下表:
根据文件权限查找文件,使用 -perm 选项。所有者使用 -user 选项
另外,find 命令可以通过逻辑操作符来创建更复杂的逻辑关系
打印当前目录下所有以 .txt 结尾的符号链接: find . -type l -name “*.txt” -print
打印当前目录下所有权限为 777 的 php 文件:find . -type f -name "*.php" -perm 777
打印当前目录下 root 用户拥有的所有文件:find . -type f -user root
打印当前目录下权限不是 777 和 664 的所有文件:find . -type f \( ! -perm 777 and ! -perm 664 \)
3、find 命令(三)
使用 find 命令的 -exec 选项来实现对查找到的文件执行指定的动作命令
找到当前目录下所有 php 文件,并显示其详细信息: find . -name "*.php" -exec ls -l {} \;
-exec 是 find 命令对找到的文件执行的动作,这个动作就是对找到的文件执行命令,上面的命令就是ls -l {}
。在这里说明一下{}
和\;
,{}
其实它就是一个占位符,在 find 命令的执行过程中会不断地替换成当前找到的文件,相当于”ls -l 找到的文件”。而\;
是 -exec 命令结束的标记,因为规定 -exec 后面的命令必须以;
结束,但;
在 shell 中有特殊含义,必须要转义,所以写成\;
。
4、xargs 命令
标准输入通常使用管道符(|)将一个命令的输出作为另一个命令的输入,实现数据的传递和处理。
xargs命令可以将标准输入转换成命令行参数,从而实现批量处理命令行参数的目
- 1. 批量删除文件: find . -name "*.txt" | xargs rm
- 2. 批量移动或复制文件: find . -name "*.txt" | xargs -I {} cp {} /dest
- 3. 批量压缩文件: find . -name "*.txt" | xargs tar -cvzf files.tar.gz
- 4. 批量修改文件权限: find . -name "*.txt" | xargs chmod 644
- 5. 批量查找文件内容: grep "pattern" $(find . -name "*.txt" | xargs)
- 6. 批量执行命令: cat file.txt | xargs -n1 command
是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据
可以用管道将一个命令的 stdout(标准输出)重定向到另一个命令的 stdin(标准输入)。但有些命令只能以命令行参数的形式接收数据,而无法通过 stdin 接收数据流。在这种情况下,无法通过管道将数据重定向给这些命令。
这时 xargs 就可以发挥它的作用了,xargs 命令可以从标准输入接收输入,并把输入转换为一个特定的参数列表。
参数 | 描述 |
---|---|
-n | 指定每行最大的参数数量 |
-d | 指定分隔符 |
将多行输入转换为单行输出:cat a.txt | xargs
将单行输入转换为多行输出:echo "1 2 3 4 5 6 7" | xargs -n 3 ;-n 用于指定每行最大的参数数量值
将单行输入转换为多行输出,指定分隔符为 i:cat b.txt | xargs -d i -n 3
查找当前目录下所有 c 代码文件,统计总行数:find -type f --name "*.c" | xargs wc -l