曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5215|回复: 1
打印 上一主题 下一主题

批量修改文件名

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2009-5-2 12:36:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于下载的几十个文件的名字都有乱码,所庆的是这些乱码都代表同一个字符串,于是用以下脚本将所有文件改名,就是用一个正常的字符串替换掉乱码字符串:
#!/bin/bash

for filename in *.rar
do
         newfilename=`echo $filename | sed -n 's/old_string/new_string/p'`
    mv "$filename" "$newfilename"
done

exit 0

说明
for 语句中读取当前文件夹下所有的 rar 文件的文件名(就是这些 rar 文件的文件名中含有乱码)。
old_string 代表乱码字符串
new_string 代表要替换到新的字符串
sed 命令中,-n 配合 /p 选项后,如果该行确实发生了替换,则输出该行,否则不输出.

补充
有时一些中文在 linux 里由于编码的关系在终端窗口里显示为乱码。替换这些乱码的字符串,不能直接在 vi 窗口里复制这些乱码串,而是要在 x window 里复制。比如说,一段乱码字符串在 vi 窗口里直接复制可能是以“???" 来显示(或者还有别的奇怪字符),这样这样会造成批量修改时的困扰,而在 x window 窗口里复制后再粘贴到 终端窗口里,显示的可能就是直接的编码格式,如“<9b><97><8a>“ ,这样就可以不用 "\" 符号就可以批量修改了。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
沙发
 楼主| 发表于 2012-3-26 00:50:27 | 只看该作者
下面这段代码将当前目录下所有 jpg 或 png 格式的文件进行有规律的批量命名:
[Bash shell] 纯文本查看 复制代码
#!/bin/bash

count=1

for img in *.[jJ][Pp][Gg] *.[Pp][Nn][Gg]
do
    new=image-$count.${img##*.}
    mv "$img" "$new" 2> /dev/null
    if [ $? -eq 0 ];
    then
        echo "Renamimg $img to $new"
        let count++
    fi
done

运行输出:
# sh rename.sh
Renamimg 123.jpg to image-1.jpg
Renamimg 124.JPG to image-2.JPG
Renamimg 125.JpG to image-3.JpG
Renamimg 223.png to image-4.png
Renamimg 224.PNG to image-5.PNG
Renamimg 225.pNg to image-6.pNg
在上面的代码中,for 循环里的中括号包含了图片格式后缀名的每个字母可能的大小写格式,这样增加了兼容性。另外,${img##*.} 表达式是获得文件的后缀名,详细可参考:http://www.groad.net/bbs/read.php?tid-6715.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-15 15:27 , Processed in 0.079959 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表