Shell比较测试&查找(结合xargs)

一、比较测试

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scc_hy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值