• Linux 重命名命令 rename 和 mv 详解


    刚学linux时,对文件重命名脑袋里立马呈现了rename命令,但却用不起来。G了一下,仍是一知半解,而且发现很多人对它也是很陌生!还有部分童鞋说直接使用mv,哎,mv还真管用,但老感觉命令名咋就那么不顺眼呢!

    我们来man下吧,先man mv:

    mv - move (rename) files

    mv不仅有转移的功能,确实有重命名的含义,语法简单可理解为:

    mv [path/]oldfilename [path/]newfilename

    但只能是重名为当个文件。

    我们再来man rename:

    rename - renames multiple files

    可以看出rename命令是专用于文件重命名的,而且是对批量文件重命名。

    Linux的 rename版本

    Linux的 rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了, 由于历史原因,在Perl语言大红大紫的时候,Linux的工具开发者们信仰Perl能取代C,所以大部分工具原来是C版本的都被Perl改写了,因为 Perl版本的支持正则处理,所以功能更加强大,已经不再需要C语言版本的了。

    如何区分系统里的rename命令是哪个版本的?

    输入 man rename 看到第一行是

    RENAME(1) Linux Programmer’s Manual RENAME(1)

    那么 这个就是C语言版本的。而如果出现的是:

    RENAME(1)              Perl Programmers Reference Guide              RENAME(1)

    这个就是Perl版本的了!

    两个版本的语法差异

    1. C语言的,按照man上面的注解,rename的语法格式是:
      rename fromtofile

      d这个命令有三个参数,分别是 from : 修改什么名字, to:改成什么名字, file 需要修改的文件是哪些。

      用法示例:比如,有一批文件,都是以 log开头的, log001.txt,  log002.txt ....... 一直到 log100.txt,现在想要把这批文件的log全部替换为 history

      rename  log history log*
      这句命令的意思很明白了,把 以 log开头的所有文件中的 log字符替换为 history,这样替换后的文件是: history001.txt,  history002.txt ..... 一直到 history100.txt。
    2. Perl 版本的批量重命名,带有Perl的好处是,你可以使用正则表达式来完成很奇特的功能。perl 版本的参数格式:
      rename  perlexpr files
      man rename的帮助示例:有一批文件,以 .bak结尾,现在想把这些 .bak 统统去掉:
      rename     's/\.bak$//'        *.bak
      这个命令很简单,因为我还没有系统学习过perl,我不知道perl里替换字符串是不是这么干的,但sed是这么干的,所以如果你有sed或者tr基础,很容易明白,这个替换和sed里的正则语法是一模一样的。

    总结:所以如果你只是重名一个文件,那么还是mv方便快捷!

  • 相关阅读:
    在Windows服务器上开启SNMP代理程序
    动态哈希
    redis 配置文件详解
    查询优化原则
    索引建立原则
    Oracle执行计划详解
    Oracle start with connect by prior 用法
    正则表达式--特殊需求表达式
    正则表达式--检验数字的表达式
    正则表达式--检验字符的表达式
  • 原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4618198.html
Copyright © 2020-2023  润新知