-
find
find 命令主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。
通过名字查找 -name
通过类型查找 -type
通过权限查找 -perm
用户 -usera) 打印当前目录下的文件目录列表:
find . -print
b) 打印当前目录下所有以.txt 结尾的文件名 :find . -name "*.txt" -print
c)打印当前目录下所有以.txt 或.pdf 结尾的文件名:find . \( -name "*.pdf" -or -name "*.txt" \)
d) 打印当前目录下所有不以.txt 结尾的文件名:find . ! -name "*.txt"
e) 找到当前目录下所有 php 文件,并显示其详细信息,可以使用如下命令:
find . -name "*.php" -exec ls -l {} \;
-exec 是 find 命令对找到的文件执行的动作,这个动作就是对找到的文件执行命令,上面的命令就是 ls -l {}。在这里说明一下{}和;,{}其实它就是一个占位符,在 find 命令的执行过程中会不断地替换成当前找到的文件,相当于”ls -l 找到的文件”。而;是-exec 的命令结束标记,因为规定-exec 后面的命令必须以;结束,但;在 shell 中有特殊含义,必须要转义,所以写成;。
(f) 实验楼环境中有很多自己编写的 c 语言代码文件,现在想要把所有 c 语言代码文件下载下来,如果一个一个的下载很麻烦,我们可以先查找到所有的 c 语言代码文件,然后将这些文件内容写入到一个文件中,下载该文件,可以使用如下命令:find . -name "*.c" -exec cat {} \; > all.c
默认下,-exec 后面只能使用单个命令,如果想要多个命令,可以将多个命令写入脚本文件中,然后在-exec 中使用这个脚本,可以使用如下命令:find . -name "*.c" -exec ./command.sh {} \;
脚本内容:
ls -l $1 # $1 表示第一个参数(传参)
cat $1
逻辑关系
2. xargs
我们可以用管道将一个命令的 stdout(标准输出)重定向到另一个命令的 stdin(标准输入)。但有些命令只能以命令行参数的形式接收数据,而无法通过 stdin 接收数据流。这时 xargs 就可以发挥它的作用了,xargs 命令可以从标准输入接收输入,并把输入转换为一个特定的参数列表。
将多行输入转换为单行输出,可以使用如下命令:cat a.txt | xargs
将单行输入转换为多行输出,可以使用如下命令:echo "1 2 3 4 5 6 7" | xargs -n 3
将单行输入转换为多行输出,指定分隔符为 i,可以使用如下命令:cat b.txt | xargs -d i -n 3