linuxshell脚本攻略学习9--rename命令详解
rename命令详解:
对⽂件重命名是常⽤的操作之⼀,⼀般对单个⽂件的重命名⽤mv命令,如:
amosli@amosli-pc:~/learn/example$ ls
<
amosli@amosli-pc:~/learn/example$   a.txt
amosli@amosli-pc:~/learn/example$ ls
<
那么如何对指⽂件进⾏重命名呢?当然你可以全部⼿动去赋值,但很影响效率,如下,将所有⽂件名称都改为⼤写的,如何做呢?
amosli@amosli-pc:~/learn/example$ ls
<
<
<
<
<
amosli@amosli-pc:~/learn/example$ rename 'y/a-z/A-Z/' *
amosli@amosli-pc:~/learn/example$ ls
A.TXT
B.TXT
C.TXT
D.TXT
E.TXT
如果⽤mv命令可能⼿动要花很长时间,但rename命令⼀句就搞定了。
下⾯来介绍rename命令⼯具:
Linux的rename 命令有两个版本,⼀个是C语⾔版本的,⼀个是Perl语⾔版本的,早期的Linux发⾏版基本上使⽤的是C语⾔版本的,现在已经很难见到C语⾔版本的了,因为Perl版本的⽀持正则处理,所以功能更加强⼤,基本上现在linux下默认的rename命令都是Perl版的。
如何查看系统⾥的rename命令是哪个版本的?
输⼊man rename命令,我的是ubuntu12.04,出现下⾯的提⽰:
amosli@amosli-pc:~/learn/example$ man rename
RENAME(1)                                        Perl Programmers Reference Guide                                        RENAME(1)
NAME
rename - renames multiple files
.
.................
很明显是Perl版的,如果输⼊man rename出现下⽅提⽰,那说明是C版:
RENAME(1) Linux Programmer’s Manual RENAME(1)
这⾥由于没怎么接触过C版的,就不做介绍了。
Perl语⾔是公认的正则表达式之王,对正则的⽀持相当给⼒,所以在linux命令⾥都能使⽤正则。
rename的语法中就有正则:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
在linux的rename help提⽰下有如下⼀段话:
DESCRIPTION
"rename" renames the filenames supplied according to the rule specified as the first argument.  The perlexpr argument is a
Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames specified.  If a given
filename is not modified by the expression, it will not be renamed.  If no filenames are given on the command line,
filenames will be read via standard input.
⼤致意思是rename命令修改符合后⾯条件的⽂件的⽂件名,只有符合perlexpr的⽂件名才会被修改,否则将不会被修改。
OPTIONS
-v, --verbose
Verbose: print names of files successfully renamed.
-n, --no-act
No Action: show what files would have been renamed.
-
f, --force
Force: overwrite existing files.
对于参数:
-v 表⽰会显⽰修改成功的⽂件名;
-n 则表⽰不执⾏任何操作,主要⽤来测试rename过程,并不直接运⾏,可以查看测试效果后,然后再运⾏;-f 则表⽰会强制修改。
例:
drwxrwxr-x 2 amosli amosli 4096 12⽉2600:30 ./
drwxrwxr-x 5 amosli amosli 4096 12⽉2523:58 ../
-rw-rw-r-- 1 amosli amosli    0 12⽉2600:
-rw-rw-r-- 1 amosli amosli    0 12⽉2600:30 Untitled Document
-rw-rw-r-- 1 amosli amosli    0 12⽉2600:30 Untitled Document 2
amosli@amosli-pc:~/learn/example$ rename  -v  's/ /_/g' *
Untitled Document renamed as Untitled_Document
Untitled Document 2 renamed as Untitled_Document_2
这⾥⽤到的是-v参数,'s/ /_/g' 正则表⽰的是将空格替换为_, *则表⽰应⽤于所有⽂件。
amosli@amosli-pc:~/learn/example$ rename    's/\.txt$//'      *.txt
则表⽰删除所有txt 的⽂件后缀名,执⾏结果如下:
amosli@amosli-pc:~/learn/example$ ll
total 8
drwxrwxr-x 2 amosli amosli 4096 12⽉2600:35 ./
drwxrwxr-x 5 amosli amosli 4096 12⽉2523:58 ../
-rw-rw-r-- 1 amosli amosli    0 12⽉2600:26 a
-
rw-rw-r-- 1 amosli amosli    0 12⽉2600:30 Untitled_Document
-rw-rw-r-- 1 amosli amosli    0 12⽉2600:30 Untitled_Document_2
将所有⽬标.mp3⽂件移⼊指定的⽬录中,则可以⽤:
find . -type f -name '*mp3' -exec mv {} ../ \;
例:
amosli@amosli-pc:~/learn/example$ find . -type f -name '*mp3';
./b.mp3
./a.mp3
amosli@amosli-pc:~/learn/example$ find . -type f -name '*mp3' -exec mv {} ../ \;
amosli@amosli-pc:~/learn/example$ ls
amosli@amosli-pc:~/learn/example$ cd ..
amosli@amosli-pc:~/learn$ ll
total 120
drwxrwxr-x  5 amosli amosli 4096 12⽉2600:40 ./
drwxr-xr-x 69 amosli amosli 4096 12⽉2522:11 ../
----------  1 amosli amosli    3 12⽉1822:49 a1
-rw-rw-r--  1 amosli amosli    3 12⽉1822:49 a2
-rw-rw-r--  1 amosli amosli    3 12⽉1822:49 a3
-rw-rw-r--  1 amosli amosli    0 12⽉2600:39 a.mp3
-rw-rw-r--  1 amosli amosli  16 12⽉2301:
-rw-rw-r--  1 amosli amosli    0 12⽉2600:39 b.mp3
-rw-rw-r--  1 amosli amosli  11 12⽉2301:45 cecho.sh
-
rw-rw-r--  1 amosli amosli  79 12⽉1900:56 debug.sh
将⽂件名称的⼤写全部转换为⼩写则为:
rename 'y/A-Z/a-z/' *
将*.JPG更名为*.jpg则可以⽤:
rename *.JPG *.jpg
其他参数:rename⽀持的参数相当多,-a 到-z均有,如需获取更多信息可以输⼊如下命令:
man rename
h
会列出⼀系列的参数列表,如下:
。。。。。。。。。
-?  ........  --help
Display help (from command line).
-a  ........  --search-skip-screen
Forward search skips current screen.
-A  ........  --SEARCH-SKIP-SCREEN
Forward search always skips target line.
-b [N]  ....  --buffers=[N]
Number of buffers.
-B  ........  --auto-buffers
Don't automatically allocate buffers for pipes.
-c  ........  --clear-screen
Repaint by clearing rather than scrolling.
-
d  ........  --dumb
Dumb terminal.
-D [xn.n]  .  --color=xn.n
Set screen colors. (MS-DOS only)
-e  -E  ....  --quit-at-eof  --QUIT-AT-EOF
Quit at end of file.
-f  ........  --force
Force open non-regular files.
-F  ........  --quit-if-one-screen
Quit if entire file fits on first screen.
-g  ........  --hilite-search
Highlight only last match for searches.
-G  ........  --HILITE-SEARCH
Don't highlight any matches for searches.
-h [N]  ....  --max-back-scroll=[N]
Backward scroll limit.
-i  ........  --ignore-case
Ignore case in searches that do not contain uppercase.
。。。。。。
linux命令及shell编写
可以根据⾃⼰需要进⾏使⽤。
linux命令每个命令都可以拿出来仔细研究,但想深⼊研究,⼀定要掌握正则,正则表达式,主流语⾔都⽀持,对⽂本处理有很⼤帮助,接下来的篇幅将会研究⼀些正则表达式。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。