一、比较测试
1. 简单数值文本测试
1.1 测试两个变量的联合关系
var=2; var2=2
# var不等于0 and var2大于2 是返回:it is true;否返回:it is false
[ $var -ne 0 -a $var2 -gt 2 ] && echo "it is true" || echo "it is false";
## it is false
# var不等于0 或 var2大于2 是返回:it is true;否返回:it is false
[ $var -ne 0 -o $var2 -gt 2 ] && echo "it is true" || echo "it is false";
## it is true
1.2 检查文本是否空
str1=''
[[ -z $str1 ]] && echo 'str1 is blank' || echo 'str1 is not blank';
[[ -n $str1 ]] && echo 'str1 is not blank' || echo 'str1 is blank';
1.3 简单解释
"""
-gt 大于
-lt 小于
-ge 大于或等于
-le 小于或等于
-a 是逻辑与操作符 -o 是逻辑或操作符
[[ -z $str1 ]] # 为空串返回真
[[ -n $str1 ]] # 不是空返回真
"""
2. 文件测试
2.1 文件是否存在
fpath="./test.sh"
[ -e $fpath ] && echo File exists || echo File not exists;
## 或者
if [ -e $fpath ]; then echo File exists; else echo File not exists; fi
2.2 简单解释
"""
[ -f $file_var ] 包含正常的文件路径或文件名,则返回真
[ -x $var ] 包含的文件可执行,则返回真
[ -d $var ] 包含的文件时目录,则返回真
[ -e $var ] 包含的文件存在,则返回真 *****
[ -c $var ] 包含的文件是一个字符设备文件的路径,则返回真
[ -b $var ] 包含的文件是一个块设备文件的路径,则返回真
[ -w $var ] 包含的文件可写,则返回真
[ -r $var ] 包含的文件可读,则返回真
[ -L $var ] 包含的是一个符号链接,则返回真
"""
二、查找
1. 查找当前文件下所有的文件(包含文件中的文件
)
find . -type f -print0 | xargs -0 ls ## 查看当前文件下的所有文件(包含文件中的文件)
2. 基于正则、目录、使用时间、文件类型查找
# 1 正则
## 文件名中有 out 和 txt 的文件
find . \( -name '*txt' -a -name "out*" \) -print
## 忽略大小查找 .px 结尾的文件
find . -iregex '.*\.p.$' # -iregex 忽略大小写
## 否定查找
find . ! -name "*.txt" -print
# 2 目录深度: 查找1-2层目录中全部.sh 文件
find . -maxdepth 2 -name "*.sh" -print
# 3 文件类型&使用时间:
### 找出7天内有修改的文件(当前文件夹)
find . -maxdepth 1 -type f -mtime -7 -print
2.1 简单解释
基于
文件类型&使用时间
进行搜索的时候,务必要先限制搜索文件的范围,不然会全部遍历
其他命令解释
"""基于文件类型的搜索
find -type f -print
f 普通文件
l 符号链接
d 目录
c 字符设备
b 块设备
s 套接字
p FIFO
"""
"""基于时间戳的搜索
find -type f -atime -7 -print
--- 天
-atime 用户最近一次访问文件的时间
-mtime 文件内容最后一次被修改的时间
-ctime 文件元数据最后一次改变的时间
--- 分钟
find -type f -amin -7 -print
-amin
-mmin
-cmin
-newer
find . -type f -newer file.py -print #比file.py 修改时间更近的所有文件
"""
三、结合 xargs
查找
3.1 xargs
简单运用
# 在sh文件里找到 有 fo 的一行
ls *.sh | xargs grep fo
cat example.txt
"""
11 12 14
1 2 3 4 7
"""
# 1、将多行转换成1行
cat example.txt | xargs
### >> 11 12 14 1 2 3 4 7
# 2、将一行转化成3行
cat example.txt | xargs -n 3
"""
11 12 14
1 2 3
4 7
"""
# 3、 分割&分行
echo "FenXGeXFenXHang" | xargs -d X -n 2
### -d 以哪个字符分割 -n 每行包含多少字符
"""
Fen Ge
Fen Hang
"""
3.2 xargs
结合 find
# 将包含换行符或空白符的文件传给xargs
## 其中使用grep 找出内容中不含 image的文件
find . -maxdepth 1 ! -name "*.docx" -print0 | xargs -0 grep -L image
## 1、结合find使用xargs批量删除
find . -type f -name "*.txt" -print | xargs rm -f
### 使用 -print0 将间隔用 \0表示
find . -type f -name "*.txt" -print0 | xargs -0 rm -f
## 2、统计源代码目录中所有sh程序文件的行数
find . -type f -name "*.sh" -print0 | xargs -0 wc -l