批量修改文件后缀名的Shell脚本

发布时间:2021-01-10编辑:脚本学堂
本文介绍了Shell脚本批量修改文件后缀名的方法,收集了二个shell修改文件后缀名的例子,需要的朋友参考下。

思路分析:
批量替换文件名,使用一个for循环依次遍历指定目录下的每个文件。
对于每个文件,假如该文件的名称为name.oldext,那么必须原始文件名中挖出name,再将它与新的文件扩展名newext拼接形成新的文件名name.newext。

例子:
 

复制代码 代码示例:
#!/bin/bash
oldext="JPG"
newext="jpg"
dir=$(eval pwd)
for file in $(ls $dir | grep .$oldext)
        do
        name=$(ls $file | cut -d. -f1)
        mv $file ${name}.$newext
        done
echo "change JPG=====>jpg done!"

说明:
1,变量oldext和newext分别指定旧的扩展名和新的扩展名。dir指定文件所在目录;
2,“ls $dir | grep .$oldext”用来在指定目录dir中获取扩展名为旧扩展名的所有文件;(脚本学堂 www.jb200.com 编辑整理)
3,在循环体内先利用cut命令将文件名中“.”之前的字符串剪切出来,并赋值给name变量;接着将当前的文件名重命名为新的文件名。
通过这个脚本,所有照片的扩展名都成功修改。

为了使此脚本更具有通用型,增加几条read命令实现脚本和用户之间的交互。

改进版的代码:
 

复制代码 代码示例:
#!/bin/bash
read -p "old extension:" oldext
read -p "new extension:" newext
read -p "The directory:" dir
cd $dir
for file in $(ls $dir | grep .$oldext)
        do
        name=$(ls $file | cut -d. -f1)
        mv $file ${name}.$newext
        echo "$name.$oldext ====> $name.$newext"
        done
echo "all files has been modified."

例3,网友提供的批量修改文件后缀名的实例。
 

复制代码 代码示例:
#!/bin/sh
# file name : rename_suffix.sh
# author: zhouhh
# Email: ablozhou@gmail.com
 
echo "input what suffix will be replaced :"
read SUFFIX_SRC
echo "input what suffix of file to rename to:"
read SUFFIX_DST
 
for i in *.$SUFFIX_SRC
do
    if [ -e $i ]; then
        echo "mv $i to `basename $i .$SUFFIX_SRC`.$SUFFIX_DST"
        mv $i `basename $i .$SUFFIX_SRC`.$SUFFIX_DST
    else
        echo "file does not exist."
        exit -1
    fi
 
done