概述
iamlaosong文
工作中需要批量将一批文件名改短,改短部分为随机按时间生成的,没什么规律,无法简单的用rename命令修改,那个什么正则表达式又不会写,幸好在网上找到一种方法,成功的用脚本实现了文件名截短。
原文件名如下:
21001_20170101_340000_1_HK_BCF_201701122132_2060.txt
21001_20170101_340000_1_LY_BCF_201701122132_2059.txt
21002_20170101_340000_1_NBCLCK_BCF_201701122132_2064.txt
21002_20170101_340000_1_NBCLJK_BCF_201701122132_2063.txt
21003_20170101_340000_1_TD_BCF_201701122132_2061.txt
21002_20170101_340000_1_ZY_BCF_201701122132_2062.txt
shell脚本如下,其中tshort=${tfile%BCF*.txt}BCF.txt将BCF后面的都截掉,改为BCF.txt,tshort=${tshort#*_*}则进一步将前面的210001_截掉(删除与*_*匹配的最小部分,返回剩余部分)。
for tfile in *.txt
do
tshort=${tfile%BCF*.txt}BCF.txt
tshort=${tshort#*_*}
if [ ${tfile} != ${tshort} ]; then
mv ${tfile} ${tshort}
fi
done
执行结果如下:
20170101_340000_1_HK_BCF.txt
20170101_340000_1_LY_BCF.txt
20170101_340000_1_NBCLCK_BCF.txt
20170101_340000_1_NBCLJK_BCF.txt
20170101_340000_1_TD_BCF.txt
20170101_340000_1_ZY_BCF.txt
为了保持文件名的一致性,需要将其中部分文件名中的NBCL去掉,这可以用rename命令完成(将_NBCL改为_),即:
rename _NBCL _ *BCF.txt
rename命令是专用于文件重命名的,上面的例子可以看出,rename既可以给单个文件重命名,也可以给批量文件重命名。
注意:rename命令是带3个参数而不是2个参数,上面第二个参数为空,表示删除第一个参数指定的字符。
执行结果如下:
20170101_340000_1_HK_BCF.txt
20170101_340000_1_LY_BCF.txt
20170101_340000_1_CK_BCF.txt
20170101_340000_1_JK_BCF.txt
20170101_340000_1_TD_BCF.txt
20170101_340000_1_ZY_BCF.txt
========================================
很好的方法吧,注意其中通配符的用法,其实关键就在于参数替换的运用,下面总结一下:
${param:-default} | 如果param为空,整个式子的值就等于default |
${#param} | 整个式子的值为param的长度 |
${param%word} | 从param尾部开始删除与word匹配的最小部分,返回剩余部分 |
${param%%word} | 从param尾部开始删除与word匹配的最长部分,返回剩余部分 |
${param#word} | 从param头部开始删除与word匹配的最小部分,返回剩余部分 |
${param##word} | 从param头部开始删除与word匹配的最长部分,返回剩余部分 |
所谓最小部分就是第一次匹配,而最长部分就是最后一次匹配,例如:
假定aa=iamlaosongsongdc
则echo ${aa%song*} 显示:iamlaosong
而echo ${aa%%song*} 显示:iamlao
如果不用通配符,echo ${aa%%song} 显示:iamlaosongsongdc,因为没有匹配上。
再补充几个用法
${param:=bar} | 检查param是否为空,若不为空,则返回其值;否则将param赋值为bar,然后返回这个值 |
${param:?bar} | 若param为空或不存在,则输出param:bar并异常终止脚本 |
${param:+bar} | param存在且不为空的情况下才返回param,否则返回空(貌似bar在这里没用) |
${param:m:n} | 从param左起第m个字符开始(0表示第一个),向后取n个字符,如省略n,则取其后所有字符 |
${param:0-m:n} | 从param右起第m个字符开始(0-m相当于负值),向后取n个字符,如省略n,则取其后所有字符 |
${param:m} | 从param左起第m个字符开始(0表示第一个),向后取所有字符 |
参见:点击打开链接
最后
以上就是仁爱狗为你收集整理的Linux中如何批量截短文件名的全部内容,希望文章能够帮你解决Linux中如何批量截短文件名所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复