• (转)rename命令详解


    rename命令详解:

    原文:http://www.cnblogs.com/amosli/p/3491649.html

    文件重命名是常用的操作之一,一般对单个文件的重命名用mv命令,如:

    amosli@amosli-pc:~/learn/example$ ls
    abc.txt
    amosli@amosli-pc:~/learn/example$ mv abc.txt  a.txt
    amosli@amosli-pc:~/learn/example$ ls
    a.txt

    那么如何对指文件进行重命名呢?当然你可以全部手动去赋值,但很影响效率,如下,将所有文件名称都改为大写的,如何做呢?

    amosli@amosli-pc:~/learn/example$ ls
    a.txt  b.txt  c.txt  d.txt  e.txt
    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月 26 00:30 ./
    drwxrwxr-x 5 amosli amosli 4096 12月 25 23:58 ../
    -rw-rw-r-- 1 amosli amosli    0 12月 26 00:26 a.txt
    -rw-rw-r-- 1 amosli amosli    0 12月 26 00:30 Untitled Document
    -rw-rw-r-- 1 amosli amosli    0 12月 26 00: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月 26 00:35 ./
    drwxrwxr-x 5 amosli amosli 4096 12月 25 23:58 ../
    -rw-rw-r-- 1 amosli amosli    0 12月 26 00:26 a
    -rw-rw-r-- 1 amosli amosli    0 12月 26 00:30 Untitled_Document
    -rw-rw-r-- 1 amosli amosli    0 12月 26 00: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月 26 00:40 ./
    drwxr-xr-x 69 amosli amosli 4096 12月 25 22:11 ../
    ----------  1 amosli amosli    3 12月 18 22:49 a1
    -rw-rw-r--  1 amosli amosli    3 12月 18 22:49 a2
    -rw-rw-r--  1 amosli amosli    3 12月 18 22:49 a3
    -rw-rw-r--  1 amosli amosli    0 12月 26 00:39 a.mp3
    -rw-rw-r--  1 amosli amosli   16 12月 23 01:49 args.txt
    -rw-rw-r--  1 amosli amosli    0 12月 26 00:39 b.mp3
    -rw-rw-r--  1 amosli amosli   11 12月 23 01:45 cecho.sh
    -rw-rw-r--  1 amosli amosli   79 12月 19 00: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命令每个命令都可以拿出来仔细研究,但想深入研究,一定要掌握正则,正则表达式,主流语言都支持,对文本处理有很大帮助,接下来的篇幅将会研究一些正则表达式。

  • 相关阅读:
    ImageMagick:给png 填充指定的背景颜色(ImageMagick 6.9.10)
    imagemagick:创建指定背景色的空图片(ImageMagick 6.9.10)
    python3:用pip安装第三方库时报错Command "python setup.py egg_info" failed with error code的解决
    python:backgroundremover安装及运行中报错的处理(backgroundremover 0.1.9)
    linux:安装pytorch(python3.6.8 / pytorch 1.10.1+cu102)
    safari: css:解决translate时移动的元素闪烁(safari 15.5)
    vue.js3:用elcheckbox做复选框(vue@3.2.37 / elementplus@2.2.2)
    python:用backgroundRemover+imageMagick给人像照片更换背景色
    编写LLVM后端
    交互式 CLI
  • 原文地址:https://www.cnblogs.com/liujiacai/p/8313548.html
Copyright © 2020-2023  润新知