利用shell脚本进行批量处理文件后缀名
作者:李昊哲小课
这篇文章主要给大家介绍了关于如何使用shell脚本进行批量处理文件后缀名,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
shell脚本批量处理文件后缀名
flumes收集日常完成后会对收集的文件添加.COMPLETED后缀名。
我仍然使用原文件名,于是萌生了编写 shell 脚本批量删除文件后缀名的想法。
效果很好,但整个脚本功能太多单一,如果想按需修改文件后缀名呢?
于是编写了 shell 脚本批量修改文件后缀名。
shell脚本批量删除文件后缀名
批量删除文件后缀名·.COMPLETED
#!/bin/bash input_dir=$1 if [ -z "$input_dir" ]; then echo "Usage: ./rename.sh input_directory" exit 1 fi cd "$input_dir" || exit for file in *.csv.COMPLETED; do newname=$(echo $file | sed 's/\.COMPLETED//') mv "$file" "$newname" done
执行脚本
shell脚本批量修改文件后缀名
#!/bin/bash # 检查参数数量是否正确 if [ "$#" -ne 3 ]; then echo "Usage: $0 <path> <old_extension> <new_extension>" exit 1 fi # 提取参数 path=$1 old_extension=$2 new_extension=$3 # 查找并修改文件后缀名 find "$path" -type f -name "*.$old_extension" -exec sh -c 'mv "$0" "${0%.$1}.$2"' {} $old_extension $new_extension \;
执行脚本
shell脚本批量修改文件名(文件名中添加字符)
脚本1
[root@localhost ~]# cat 02.sh #!/bin/bash #written by mofansheng@2016-02-17 path=/goodboy [ -d $path ] && cd $path for file in `ls` do mv $file `echo $file|sed 's/\(.*\)\.\(.*\)/\1_aaa.\2/g'` done
解释说明:
使用sed替换,正则表达式第1个()括号里面代表文件名即\1;中间. 使用\进行脱意,代表分隔符;
第2个括号里面代表后缀html内容即\2;
使用此方法需要在替换中添加.符号;
脚本2:
#!/bin/bash #written by mofansheng@2016-02-17 path=/goodboy [ -d $path ] && cd $path for file in `ls` do mv $file `echo $file|sed 's/\(.*\)\(\..*\)/\1_aaa\2/g'` done
解释说明:
同样使用sed替换,正则表达式,与上面的区别在于第2个括号里面的内容,代表.html 分隔符和后缀名为一体,替换内容的话不需要再单独加.点;.分隔符同样需要使用\进行脱意;
shell脚本批量修改文件名(删除文件名中字符)
方法一:for循环结合sed替换
[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file `echo $file|sed 's/_finished//g'`;done;
方法二:ls结合awk,输出交给bash执行
[baby@localhost ~]$ ls *.jpg |awk -F "_finished" '{print "mv "$0" "$1$2""}'|bash
实际执行的命令如下,以_finished作为分隔符,mv及变量 需要加双引号
[baby@localhost ~]$ ls *.jpg |awk -F "_finished" '{print "mv "$0" "$1$2""}' mv stu_102999_1_finished.jpg stu_102999_1.jpg mv stu_102999_2_finished.jpg stu_102999_2.jpg mv stu_102999_3_finished.jpg stu_102999_3.jpg mv stu_102999_4_finished.jpg stu_102999_4.jpg mv stu_102999_5_finished.jpg stu_102999_5.jpg
方法三:rename改名
[baby@localhost ~]$ rename "_finished" "" *.jpg
方法四:for循环加变量部分截取
[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file `echo ${file%_finished*}.jpg`;done;
不使用echo也可以实现
[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file ${file%_finished*}.jpg;done;
到此这篇关于利用shell脚本进行批量处理文件后缀名的文章就介绍到这了,更多相关shell脚本处理文件后缀名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!