SHELL脚本(2)

用cat进行拼接
录制与回放终端对话
文件查找与文件列表
将命令输出作为命令参数
用tr进行转换
校验和与核实
排序。单一与重复
临时文件命名与随机数
分割文件与数据
根据扩展名切分文件名
用rename和mv批量重命名文件
拼写检查与词典操作
交互输入自动化

用cat进行拼接

(cat 通常用于读取,显示或拼接文件内容)
读取文件
$cat file1 file2 …

root@lilongiu-VirtualBox:~/study/shell# cat 1.txt 2.txt 
1
2
3
fsfsfs

从标准输入中读取(使用管道操作符)

OUTPUT_FROM_SOME COMMANDS | cat

echo ‘hello’ | cat -i.txt

root@lilongiu-VirtualBox:~/study/shell# echo 'pinjie' | cat - 1.txt 
pinjie
1
2
3

压缩空白行

$cat -s file
tr 移除空白行(将连续多个’\n’字符压缩成单个’\n’(换行符))

root@lilongiu-VirtualBox:~/study/shell# cat 1.txt 
1


2

3
root@lilongiu-VirtualBox:~/study/shell# cat -s 1.txt 
1

2

3
root@lilongiu-VirtualBox:~/study/shell# cat 1.txt | tr -s '\n'
1
2
3

将制表符显示为 ^|

$cat -T file1

root@lilongiu-VirtualBox:~/study/shell# cat 1.txt 
	1
	2
3
root@lilongiu-VirtualBox:~/study/shell# cat -T 1.txt 
^I1
^I2
3

行号

$cat -n file

root@lilongiu-VirtualBox:~/study/shell# cat -n 1.txt 
     1		1
     2		2
     3	3
root@lilongiu

录制与回放终端会话

script -t 2> timing.log -a output.session(timing.log用于存放时序信息,output.session存储命令输入信息)

scriptreplay timing.log output.session (回放命令)

广播视频会话

打开两个终端(两个终端进入同一个目录)
step1:终端1输入 mkfifo scriptfifo
step2:终端2输入 cat scriptfifo
step3:终端3输入 script -f scriptfifo

然后通过在终端一输入命令 在终端二就可以实时观看了(终端二可以是不同的电脑,通过ssh登陆)

文件查找与文件列表

列出目录下所有所有的文件和文件夹

find base_path
find /home/lilongiu/study/rk (使用绝对路径) 或者相对路径 find . (当前路径的全部文件或文件夹)

find . -print
根据文件名或正则表达式匹配搜索

查找文件

find path -name “*.txt” -print #(print可也省略)
查找当前文件夹下所有的txt文件


```bash
find . -name "*.txt" 

**-iname (表示忽略大小写)**

**匹配多种文件 采用OR条件**

```bash
find . \( -name "*.txt" -o -name "*.sh" \) -print

-path 的参数可以使用通配符来匹配文件路径或文件 -name只能匹配文件
find /home -path “*.lib” -print #将会打印home目录下所有包含字母lib的文件名和文件夹。

-regex的参数和-path的类似,只不过-regex是基于正则表达式来匹配文件路径的

find . -regex ".*\(\.py\|\.sh\)$"

-iregex 表示忽略大小写

基于目录的深度搜索
-maxdepth 查找最大深度 1 为当前目录查找
-mindepth 查找最小深度 向下两级时 设置为2
find . -maxdepth 1 -type f -print #查找当前目录下的所有文件
find . -maxdepth 1 -type d -print #查找当前目录下的所有文件夹
find . -maxdepth 1 #查找当前目录下的所有文件夹和文件
find . -mindepth 2 -type -f -printf #查找当前目录下下一级的所有文件

lilongiu@lilongiu-VirtualBox:~/study/shell$ find . -mindepth 2 -type d
./userdata/model
./lib1/model
./lib2/model

根据文件类型搜索

-type 可以对文件搜索进行过滤
列出所有的目录
find . -type -d -print
只列出普通文件
find . -type f -print
值列出符号链接
find . -type l -print

相关参数解释
f 普通文件
l 符号链接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo

根据文件时间进行搜索
1 访问时间 -atime 用户最后一次访问时间
2 修改时间 -mtime 文件内容最后一次被修改时间
3 变化时间 -ctime 文件元数据(例如权限)最后一次修改时间
时间单位是天
find . -type f -atime -7 -print #七天内访问过的文件
find . -type f -atime 7 -printf #刚好七天前访问过的文件
find , -type f -atime +7 -printf #超过七天未访问过的文件

同理 -mtime -ctime 可以进行同样的查询

基于分钟的查询
-amin -cmin -mmin

基于文件大小的搜索

find  . -type f -size -2k #查找小于2k的文件
find . -type f -size +2k #查找大于2k的文件
find . -type f -size 2k #查找等于2k的文件

其他查找单位
b 块(512字节)
c 字节
w 字
k 千字节
M兆字节
G 吉字节
删除匹配的文件
find . -type f -name “*.txt” -delete

基于文件权限和所有权的匹配
find . -type f -perm 644 -print #打印权限为644的文件

find . -type f -name “*.php” | -perm 644 -print # 打印没有644权限的php文件

find . -type f -user lilong -prinf #打印出用户lilong所有的文件

结合find执行命令或动作
find . -type -user root -exrc chown slynux{} ;

find . -type f -name “*.c” -exec cat {} ;>all_c_files.txt

finf . -type f -mtime +10 -name “*.txt” -exec cp {} OLD ;
#将十天前修改过的文件复制到目录OLD

-exec 结合printf
find . -typr f -name “*.txt” -exec printf “txt file: %s\n” {} ;

让find跳过特定目录

find . ( -name “.git” -prune ) -o ( -type f -print )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值