当前位置: 代码网 > 服务器>服务器>Linux > 利用shell脚本进行批量处理文件后缀名

利用shell脚本进行批量处理文件后缀名

2024年05月18日 Linux 我要评论
shell脚本批量处理文件后缀名flumes收集日常完成后会对收集的文件添加.completed后缀名。我仍然使用原文件名,于是萌生了编写 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脚本处理文件后缀名内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com