设为首页 - 加入收藏 呼和浩特站长网 (http://www.0471zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 项目 正在 美团
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

如何在 Linux 上重命名一组文件

发布时间:2019-09-04 11:37 所属栏目:[优化] 来源:Sandra Henry-stocker
导读:几十年来,Linux 用户一直使用 mv 命令重命名文件。它很简单,并且能做到你要做的。但有时你需要重命名一大组文件。在这种情况下,rename 命令可以使这个任务更容易。它只需要一些正则表达式的技巧。 与 mv 命令不同,rename 不允许你简单地指定旧名称和新

几十年来,Linux 用户一直使用 mv 命令重命名文件。它很简单,并且能做到你要做的。但有时你需要重命名一大组文件。在这种情况下,rename 命令可以使这个任务更容易。它只需要一些正则表达式的技巧。

如何在 Linux 上重命名一组文件

与 mv 命令不同,rename 不允许你简单地指定旧名称和新名称。相反,它使用类似于 Perl 中的正则表达式。在下面的例子中,s 指定我们将第一个字符串替换为第二个字符串(旧的),从而将 this.new 变为 this.old。

  1. $?rename?'s/new/old/'?this.new?
  2. $?ls?this*?
  3. this.old?

使用 mv this.new this.old 可以更容易地进行更改一个,但是将字符串 this 变成通配符 *,你可以用一条命令将所有的 *.new 文件重命名为 *.old:

  1. $?ls?*.new?
  2. report.new??schedule.new??stats.new??this.new?
  3. $?rename?'s/new/old/'?*.new?
  4. $?ls?*.old?
  5. report.old??schedule.old??stats.old??this.old?

正如你所料,rename 命令不限于更改文件扩展名。如果你需要将名为 report.* 的文件更改为 review.*,那么可以使用以下命令做到:

  1. $?rename?'s/report/review/'?*?

正则表达式中的字符串可以更改文件名的任何部分,无论是文件名还是扩展名。

  1. $?rename?'s/123/124/'?*?
  2. $?ls?*124*?
  3. status.124??report124.txt?

如果你在 rename 命令中添加 -v 选项,那么该命令将提供一些反馈,以便你可以看到所做的更改,或许会包含你没注意的。这让你注意到并按需还原更改。

  1. $?rename?-v?'s/123/124/'?*?
  2. status.123?renamed?as?status.124?
  3. report123.txt?renamed?as?report124.txt?

另一方面,使用 -n(或 --nono)选项会使 rename 命令告诉你将要做的但不会实际做的更改。这可以让你免于执行不不想要的操作,然后再还原更改。

  1. $?rename?-n?'s/old/save/'?*?
  2. rename(logger.man-old,?logger.man-save)?
  3. rename(lyrics.txt-old,?lyrics.txt-save)?
  4. rename(olderfile-,?saveerfile-)?
  5. rename(oldfile,?savefile)?
  6. rename(review.old,?review.save)?
  7. rename(schedule.old,?schedule.save)?
  8. rename(stats.old,?stats.save)?
  9. rename(this.old,?this.save)?

如果你对这些更改满意,那么就可以运行不带 -n 选项的命令来更改文件名。

但请注意,正则表达式中的 . 不会被视为句点,而是作为匹配任何字符的通配符。上面和下面的示例中的一些更改可能不是输入命令的人希望的。

  1. $?rename?-n?'s/.old/.save/'?*?
  2. rename(logger.man-old,?logger.man.save)?
  3. rename(lyrics.txt-old,?lyrics.txt.save)?
  4. rename(review.old,?review.save)?
  5. rename(schedule.old,?schedule.save)?
  6. rename(stats.old,?stats.save)?
  7. rename(this.old,?this.save)?

为确保句点按照字面意思执行,请在它的前面加一个反斜杠。这将使其不被解释为通配符并匹配任何字符。请注意,进行此更改时,仅选择了 .old 文件。

  1. $?rename?-n?'s/\.old/.save/'?*?
  2. rename(review.old,?review.save)?
  3. rename(schedule.old,?schedule.save)?
  4. rename(stats.old,?stats.save)?
  5. rename(this.old,?this.save)?

下面的命令会将文件名中的所有大写字母更改为小写,除了使用 -n 选项来确保我们在命令执行之前检查将做的修改。注意在正则表达式中使用了 y,这是改变大小写所必需的。

  1. $?rename?-n?'y/A-Z/a-z/'?W*?
  2. rename(WARNING_SIGN.pdf,?warning_sign.pdf)?
  3. rename(Will_Gardner_buttons.pdf,?will_gardner_buttons.pdf)?
  4. rename(Wingding_Invites.pdf,?wingding_invites.pdf)?
  5. rename(WOW-buttons.pdf,?wow-buttons.pdf)?

在上面的例子中,我们将所有大写字母更改为了小写,但这仅对以大写字母 W 开头的文件名。

总结

当你需要重命名大量文件时,rename 命令非常有用。请注意不要做比预期更多的更改。请记住,-n(或者 --nono)选项可以帮助你避免耗时的错误。

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章