目录
- shell脚本批量处理文件后缀名
- shell脚本批量删除文件后缀名
- shell脚本批量修改文件后缀名
- 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脚本处理文件后缀名内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!
您可能感兴趣的文章:
- 在指定目录查找指定后缀文件的shell脚本代码
- 查找目录下同名但不同后缀名文件的shell脚本代码
- Shell脚本批量修改文件后缀名代码分享
- Shell脚本批量重命名文件后缀的3种实现
- 使用shell脚本判断文件后缀的方法实例