当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 19 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : [原创]文件批量重命名脚本
帖子发表于 : 2008-08-17 21:26 
头像

注册: 2007-08-17 17:10
帖子: 38
送出感谢: 0 次
接收感谢: 0 次
在xp下选中多个文件---右键----重命名---回车
会产生相同前缀排序的文件。

我想再ubuntu下实现这个效果。
于是搜索了一番,没搜到令我满意的。

请教了一下群里的朋友。他给我写了几句,确实可以达到以上目的:
代码:
let i=0;for it in *.png;{ mv "$it" "photo${i}.png"; let i=i+1; }


但是这个脚本用于不同类型文件,想要改前缀,都得打开修改脚本。而且必须放在文件同目录里。

这个脚本是一个主干,我研究了一下脚本的基础知识之后,经过多次修改测试,终于被我写出了满意的脚本。

代码:
#!/bin/bash
#用法:在终端使用"./renames.sh"运行
echo "===本脚本实现批量重命名某种类型文件为相同前缀+数字的文件===";
echo "!警告:一定要确保输入的前缀加上数字后,不和原先已有的文件名重复,否则文件会因为替换而丢失";
echo --------------------------------------------------------------------
echo "?---输入批量文件所在目录(如:/home/andy/图片)(当前目录输入 .即可)---";   
read  directory;
cd  "$directory";
echo "?---输入要重命名文件类型和前缀(如:png  img_  (区分大小写))[以空格分割]---";
read ext  begin;
echo ">>>开始批量重命名  $directory 下的 $ext 文件>>>>>>>>>>>>>>";
let  i=0;
             for it in   *.$ext; do
                   mv "$it"   "$begin$i.$ext";
                   let i=i+1;
             done
echo "===完成$i个文件批量重命名,文件列表如下:";
ls  *.$ext
echo -----------------------------------------------------------------------


注释和提示显示都用中文,便于大家理解。你可以改掉或去掉。

把以上代码保存为renames.sh
放在任意目录,终端运行 ./renames.sh
输入提示1:输入要批量重命名的文件路径。(文件和脚本同目录或在子目录可省略些,如”.“、“./photo”)
输入提示2:文件类型、重命名前缀(不输入前缀则文件重命名为数字0、1、2、3……)
(你输入前缀abc,那么批量重命名后的文件就是abc0、abc1、abc2、abc3……。假如事先已存在abc1,你还要用abc做前缀,这个文件就可能被替换。所以你一定要用abc的话建议你先用xyz,然后再运行一次这个脚本。)

发现我写得太罗嗦了。

这是我的第一个shell脚本,大家支持一下啊。

也许高手有更简短的语句可以实现。但我对那些/^!#@$%*\还不是很理解,所以献丑了。

如有更好办法,不妨贴出来大家分享。
希望大家一起来改进这个脚本。最好哪位高手做个简单的GUI窗口,这样更方便。


附件:
文件注释: Linux批量重命名脚本
Linux批量重命名脚本.tar [10 KiB]
被下载 152 次
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-08-17 21:29 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
lin下的改名,都支持正则的。标准的用rename。其他如rox thunar gqview等批量改名试试。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-08-17 21:41 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
lin下的改名,都支持正则的。标准的用rename。其他如rox thunar gqview等批量改名试试。


ee知道有什么可以按文件大小排序命名的么?

我试过的软件,排序命名按照的序列都不能按文件大小或者时间或者什么,都是按照文件名,如果调就得手动挑,郁闷死了


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-08-17 21:49 
头像

注册: 2007-08-17 17:10
帖子: 38
送出感谢: 0 次
接收感谢: 0 次
改进版:(无覆盖文件危险)
代码:
#!/bin/bash
echo "?---输入批量文件所在目录(如:/home/andy/图片)(当前目录输入 .即可)---";   
read  directory;
cd  "$directory";
echo "?---输入要重命名文件类型和前缀(如:png  img_  (区分大小写))[以空格分割]---";
read ext  begin;
mkdir  temp
echo ">>>开始批量重命名  $directory 下的 $ext 文件>>>>>>>>>>>>>>";
let  i=0;
             for it in   *.$ext; do
                   mv "$it"   ./temp/"$begin$i.$ext";
                   let i=i+1;
             done
mv  ./temp/*.$ext   ./
rm -r  temp
echo "===完成$i个文件批量重命名,文件列表如下:";
ls  *.$ext


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-08-17 21:50 
头像

注册: 2008-07-14 15:06
帖子: 92
地址: 天津
送出感谢: 0 次
接收感谢: 0 次
下载下来收藏,学习。


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-08-17 21:50 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
xeoc 写道:
eexpress 写道:
lin下的改名,都支持正则的。标准的用rename。其他如rox thunar gqview等批量改名试试。


ee知道有什么可以按文件大小排序命名的么?

我试过的软件,排序命名按照的序列都不能按文件大小或者时间或者什么,都是按照文件名,如果调就得手动挑,郁闷死了
代码:
ls -l | awk '/^[a-z\-]/{print $5"@"$NF}' | sort -g | sed 's/^.*@//'/


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-08-17 21:53 
头像

注册: 2007-02-07 10:15
帖子: 171
送出感谢: 0 次
接收感谢: 9
楼上的问题其实很好解决哈。。
从小到大:
let i=0; for it in `ls -S -r`; { mv "$it" "size${i}.txt"; let i=i+1; }
从大到小:
let i=0; for it in `ls -S`; { mv "$it" "size${i}.txt"; let i=i+1; }
我上面的脚本是用来排序我的文件的哈,命名为size0.txt....


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-08-17 21:56 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
pjincz 写道:
楼上的问题其实很好解决哈。。
从小到大:
let i=0; for it in `ls -S -r`; { mv "$it" "size${i}.txt"; let i=i+1; }
从大到小:
let i=0; for it in `ls -S`; { mv "$it" "size${i}.txt"; let i=i+1; }
我上面的脚本是用来排序我的文件的哈,命名为size0.txt....
:shock: ls还可以这样用?孤陋寡闻了。


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-08-17 21:59 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
pjincz 写道:
楼上的问题其实很好解决哈。。
从小到大:
let i=0; for it in `ls -S -r`; { mv "$it" "size${i}.txt"; let i=i+1; }
从大到小:
let i=0; for it in `ls -S`; { mv "$it" "size${i}.txt"; let i=i+1; }
我上面的脚本是用来排序我的文件的哈,命名为size0.txt....


怎么保留扩展名呢?


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-08-17 22:03 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
最好有个什么软件可以....


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-08-17 22:04 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
没注意过这个。需要按照大小或者时间改吗?那就要用脚本了。
照片按照exif信息改名的,包括时间/尺寸的,记得是有的,在源里面搜索描述包含exif的一堆。可我没这需要。thunar支持某些exif和id3的改名。


_________________
● 鸣学


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-08-17 22:10 
头像

注册: 2007-02-07 10:15
帖子: 171
送出感谢: 0 次
接收感谢: 9
回9楼哈,如果想改指定扩展名的文件 比如说*.png 那么就接在ls后面


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2008-08-17 22:12 
头像

注册: 2007-02-07 10:15
帖子: 171
送出感谢: 0 次
接收感谢: 9
否则的话就用正则表达式了


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2008-08-17 22:13 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
pjincz 写道:
回9楼哈,如果想改指定扩展名的文件 比如说*.png 那么就接在ls后面

$ext行不?不一样的...

shell+awk+sed 正在学...


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2008-08-17 22:21 
头像

注册: 2007-02-07 10:15
帖子: 171
送出感谢: 0 次
接收感谢: 9
shell命令可定制性很大的 说说你的要求 我给你改改


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 19 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译