LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2944|回复: 24

怎么批量改名,简单的方法有没有?

[复制链接]
发表于 2003-4-23 21:35:20 | 显示全部楼层 |阅读模式
我要把 我的 /home/music 下的后缀为 .mpga 的文件改名为 .mp3
请问有没有什么方法,不会一个一个叫我改吧.
发表于 2003-4-23 21:49:38 | 显示全部楼层
 楼主| 发表于 2003-4-23 22:16:06 | 显示全部楼层

不好意思啊

这个脚本不能解决我的问题。我不知道怎么把文件名去掉mpga然后加上mp3。劳驾再请赐教。谢谢
发表于 2003-4-23 23:13:34 | 显示全部楼层
举例说明,不知道是不是这个意思?
javalee//home/javalee/a>ls
a.abc  b.abc  c.abc  d  e  f
javalee//home/javalee/a>for i in *.*    //把所有扩展的文件放如列表
> do
> mv $i ${i%abc}mp3  //注意abc是如何环城mp3的
> done
javalee//home/javalee/a>ls  //结果
a.mp3  b.mp3  c.mp3  d  e  f
发表于 2003-4-24 00:42:48 | 显示全部楼层
还可以这样:
> mv $i ${i/%abc/mp3}

如果后缀abc大小写混杂,干脆这样:
> mv $i ${i/%.*/.mp3}

不过linux/unix下后缀名纯属摆设,系统是不会通过后缀来关联程序的。
发表于 2003-4-24 00:53:00 | 显示全部楼层
不过linux/unix下后缀名纯属摆设,系统是不会通过后缀来关联程序的。
多谢LY00;)
 楼主| 发表于 2003-4-24 11:24:55 | 显示全部楼层

多谢各位啦

quote:
    不过linux/unix下后缀名纯属摆设,系统是不会通过后缀来关联程序的。

但,如果我不把.mpga 的文件改名为.mp3那我的xmms 就是不认账。
我想再问一下:如果linux 不是通过后缀来关联程序的,那它是怎么来关联的?
发表于 2003-4-24 13:16:44 | 显示全部楼层
“.”中unix文件名中没有特殊意义,在系统眼里它与文件名中的其它字符是一样的,不象windows会对“.”进行特殊处理,你可以将文件命名为“abc.de.fg”或“abc.......”
drsupermouse所说的情况我在系统上试了一下,果然有这个问题,不过对于tar或GIMP等unix/linux平台的传统程序不存在这种问题,后来查了一下资料,又长见识了,呵呵
原来在Linux下已引入扩展名建立文件关联的方法,毕竟这个方法操作起来很简单,有关Linux文件关联的信息可参考:http://www.linuxaid.com.cn/engineer/ideal/article/file_ass.htm
发表于 2003-4-30 00:50:55 | 显示全部楼层

use perl to rename it.

Here is the perl script I wrote years ago.
It will firstly ask you in which directory your files are, and secondly ask you the old names' pattern, in your case ".mpga", and then ask you the new names' pattern ".mp3".
After getting these three information, it will replace all the old filename with the new one.

Hope it will be helpful.




#!/usr/bin/perl -w

use strict;

my($dir, $oldpat, $newpat);
print "Directory:";
chomp($dir=<STDIN>);
print "Old pattern:";
chomp($oldpat=<STDIN>);
print "New pattern:";
chomp($newpat=<STDIN>);

opendir(DH, $dir) ||die "Cannot open $dir: $!";
my @files=readdir DH;
close(DH);
my $oldname;
foreach(@files){
      $oldname=$_;
      s/$oldpat/$newpat/;
      next if (-e "$dir/$_");
      if (! rename "$dir/$oldname", "$dir/$_"){
            warn "Could not rename $oldname to $_: $!";
      }else {
            print "File $oldname renamed to $_\n";
      }

};
发表于 2003-4-30 00:56:03 | 显示全部楼层
hehe~~
还是shell简单,不过perl确实很有威力!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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