Shell脚本练习——文件相关

获取文件名,不带拓展名

使用%操作符

[root@wenzi ~]#vim example.sh
#!/bin/bash
file_name="abc.txt"
name=${file_name%.*}
echo $name
[root@wenzi ~]#./example.sh 
abc

说明:

${变量%关键词}:若变量从尾开始的数据符合关键词,则将符合的最短数据删除。

file_nameabc.txt*是通配符,匹配0个或无穷个任意字符,所以.*匹配的是.txt,因此从abc.txt中删除匹配结果,得到abc

获取文件拓展名

使用#操作符

[root@wenzi ~]#vim example.sh
#!/bin/bash
file_name="abc.txt"
extension=${file_name#*.}
echo $extension
[root@wenzi ~]#bash example.sh 
txt

说明:

${变量#关键词}:若变量从头开始的数据符合关键词,则将符合的最短数据删除

*是通配符,匹配0个或无穷个任意字符,所以*.匹配的是abc.,因此从abc.txt中删除匹配结果,得到txt

备份文件

[root@wenzi data]#vim backup.sh 
#!/bin/bash
echo -e "\033[1;32mStarting backup...\033[0m"
sleep 2
cp -av /etc/ /data/etc_`date +%F`/
echo -e "\033[1;32mBackup is finished\033[0m"

批量修改文件名

[root@wenzi wenzi]# ls
old_1.img  old_2.img  old_3.img  test.sh
[root@wenzi wenzi]# vim test.sh
#!/bin/bash
dir=/root/wenzi/
for file in `ls $dir*img`;do
        mv $file new_${file#*_}
done

[root@wenzi wenzi]# ./test.sh
[root@wenzi wenzi]# ls
new_1.img  new_2.img  new_3.img  test.sh



[root@wenzi wenzi]# cat test.sh
#!/bin/bash
for file in `find . -maxdepth 1 -name "*img" -type f`;do
        mv $file new_${file#*_}
done

[root@wenzi wenzi]# ls
new_1.img  new_2.img  new_3.img  test.sh

说明:

${file#*_} 是语法:${变量#关键词}:若变量从头开始的数据符合关键词,则将符合的最短数据删除。

find中 -maxdepth 1 表示指定目录深度为1,即仅在当前目录下搜索;此选项要放在find的第一个选项位置,做到对后面选项都生效

统计当前目录以 .img 结尾的文件大小

[root@wenzi wenzi]# cat test.sh
#!/bin/bash
sum=0
for file in `ls -l *.img | awk '{print $5}'`;do
        sum=$[$sum+$file]
done
echo $sum

[root@wenzi wenzi]# ll
total 16
-rw-r--r-- 1 root root  4 Sep  7 14:47 new_1.img
-rw-r--r-- 1 root root  2 Sep  7 14:48 new_2.img
-rw-r--r-- 1 root root  3 Sep  7 14:48 new_3.img
-rwxr-xr-x 1 root root 90 Sep  7 14:54 test.sh
[root@wenzi wenzi]# ./test.sh
9

备份/data目录下以 .txt 结尾的文件

#!/bin/bash
#wenzi
#v1
#2023-11-05

postfix=`date +%F`
for i in `find /data -type f -name "*.txt"`
do
        echo "备份文件$i"
        cp -a ${i} ${i}_${postfix}
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值