获取文件名,不带拓展名
使用%操作符
[root@wenzi ~]#vim example.sh
#!/bin/bash
file_name="abc.txt"
name=${file_name%.*}
echo $name
[root@wenzi ~]#./example.sh
abc
说明:
${变量%关键词}:若变量从尾开始的数据符合关键词,则将符合的最短数据删除。
file_name是abc.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