奇怪的rename
发表于 : 2009-11-15 0:28
奇怪的rename
今天又学习了一下rename,是一个配合正则表达式来重命名的一个强大工具。照我的习惯先看一下帮助文件。
这是man rename的显示:
因为帮助太少,所以只能自己摸索。现照网上一些说明测试:
新建一个test目录,下面放入a,b,c,d,e五个文件。
ls查看一下显示为
将每个文件都加上.txt后缀
ls查看一下显示为
删除则将.txt替换为空
ls显示为
在每个文件都加上test-前缀
ls显示为
删除前缀则将test-替换为空
ls显示每个文件的test-前缀都被删除了。
现将每个文件都加后缀.txt,然后将每个文件名都由小写改为大写
ls显示为
发现连后缀也被改为大写了,看着很别扭,还是改回来吧。rename命令有-v选项,意为执行的同时显示执行过程:
这是过程显示:
ls查看一下
rename的-n选项则为仅测试,并不实际更改文件名
rename 's/.txt//' * -n
这是测试显示,与执行过程显示是一样的:
ls查看一下,实际文件名并没有改变
选项中的-v和-n是很实用的,如果不确定重命名是否成功可先用-n测试一下,另外还有一个选项是-f,应该是强制执行的意思,此时不显示执行过程,与不加选项差不多。
单引号后面第一个字母为什么是s?是start还是select?不知道,于是用rename '字母/^/0/' * -n测试了一下其它字母,发现从a到z,m,q,s是有定义的,其中s正常显示执行过程,m与q显示为:
其它字母仅显示一句
但事实上y是有定义的,用来转换大小写。在前面的测试中没有特殊提示,估计是格式不同。于是用rename '字母/a-z/A-Z/' * -n测试其它字母,发现m,q,s,y是有定义的,其中y正常显示执行过程,s无任何显示,m与q显示为:
其它字母均显示:
在该位置上又用rename '其它字符/^/0/' * -n其它字符测试了一下,显示如下:
因为正则没学过,暂时没有找到规律性重命名文件名中的不规则部分的办法,也没有找到将文件名中所有前缀规律性重命名为00-99的办法,所以这次测试意义不大,以后有机会继续学习……
今天又学习了一下rename,是一个配合正则表达式来重命名的一个强大工具。照我的习惯先看一下帮助文件。
这是man rename的显示:
rename没有--help选项,如果rename --help查看后会提示:rename(3tcl) Tcl Built-In Commands rename(3tcl)
_________________________________________________________________________________________________
NAME
rename - 重命名或删除一个命令
总览 SYNOPSIS
rename oldName newName
_________________________________________________________________
描述 DESCRIPTION
把 过 去叫做 oldName 的命令重命名为叫做 newName。如果 newName 是一个空串则删除叫做 oldName
的命令。oldName 和 newName 可以包括名字空间限定符(包含名字空间的名字)。如果一个命令被重 命
名 到一个不同名字空间中,将来对它的调用将在新的名字空间中执行。rename 命令返回一个空串作为
结果。
参见 SEE ALSO
namespace(n), proc(n)
关键字 KEYWORDS
command, delete, namespace, rename
[中文版维护人]
寒蝉退士
[中文版最新更新]
2001/10/28
《中国 Linux 论坛 man 手册页翻译计划》:
http://cmpp.linuxforum.net
Tcl rename(3tcl)
代码: 全选
Unknown option: ?
Usage: rename [-v] [-n] [-f] perlexpr [filenames]
新建一个test目录,下面放入a,b,c,d,e五个文件。
代码: 全选
mkdir test
cd test
touch a b c d e
代码: 全选
a b c d e
代码: 全选
rename 's/$/.txt/' *
代码: 全选
a.txt b.txt c.txt d.txt e.txt
代码: 全选
rename 's/.txt//' *
代码: 全选
a b c d e
代码: 全选
rename 's/^/test-/' *
代码: 全选
test-a test-b test-c test-d test-e
代码: 全选
rename 's/test-//' *
现将每个文件都加后缀.txt,然后将每个文件名都由小写改为大写
代码: 全选
rename 's/$/.txt/' *; rename 'y/a-z/A-Z/' *
代码: 全选
A.TXT B.TXT C.TXT D.TXT E.TXT
代码: 全选
rename 'y/A-Z/a-z/' * -v
代码: 全选
A.TXT renamed as a.txt
B.TXT renamed as b.txt
C.TXT renamed as c.txt
D.TXT renamed as d.txt
E.TXT renamed as e.txt
代码: 全选
a.txt b.txt c.txt d.txt e.txt
rename 's/.txt//' * -n
这是测试显示,与执行过程显示是一样的:
代码: 全选
a.txt renamed as a
b.txt renamed as b
c.txt renamed as c
d.txt renamed as d
e.txt renamed as e
代码: 全选
a.txt b.txt c.txt d.txt e.txt
单引号后面第一个字母为什么是s?是start还是select?不知道,于是用rename '字母/^/0/' * -n测试了一下其它字母,发现从a到z,m,q,s是有定义的,其中s正常显示执行过程,m与q显示为:
代码: 全选
Number found where operator expected at (eval 1) line 1, near "m/^/0"
syntax error at (eval 1) line 1, near "m/^/0"
代码: 全选
syntax error at (eval 1) line 1, near "/^"
代码: 全选
Bareword found where operator expected at (eval 1) line 1, near "m/a-z/A"
syntax error at (eval 1) line 1, near "m/a-z/A"
代码: 全选
Warning: Use of "-z" without parentheses is ambiguous at (eval 1) line 1.
syntax error at (eval 1) line 1, near "a-z"
代码: 全选
rename '*/^/0/' * -n
Argument "*main::/" isn't numeric in bitwise xor (^) at (eval 1) line 1.
Argument "*main::/" isn't numeric in bitwise xor (^) at (eval 2) line 1.
Argument "*main::/" isn't numeric in bitwise xor (^) at (eval 3) line 1.
Argument "*main::/" isn't numeric in bitwise xor (^) at (eval 4) line 1.
Argument "*main::/" isn't numeric in bitwise xor (^) at (eval 5) line 1.
代码: 全选
rename '^/^/0/' * -n
syntax error at (eval 1) line 1, near "^"
代码: 全选
rename '$/^/0/' * -n
Argument "\n" isn't numeric in bitwise xor (^) at (eval 1) line 1.
Argument "\n" isn't numeric in bitwise xor (^) at (eval 2) line 1.
Argument "\n" isn't numeric in bitwise xor (^) at (eval 3) line 1.
Argument "\n" isn't numeric in bitwise xor (^) at (eval 4) line 1.
Argument "\n" isn't numeric in bitwise xor (^) at (eval 5) line 1.
代码: 全选
rename '-/^/0/' * -n
Unknown option: /
Unknown option: ^
Unknown option: /
Unknown option: 0
Unknown option: /
Usage: rename [-v] [-n] [-f] perlexpr [filenames]