首页 > 解决方案 > 重命名多个文件以删除 Linux 中的多余字符

问题描述

在一个目录中,我有多个以四位数开头的文件。我使用了重命名命令,但缺少其他命令。我想删除其余的字符,只留下四位数字。

以下是文件示例

0001tashi.jpg
0002tsering.jpg
0003dolma.jpg
0004samdupdorjee.jpg

我想删除除前四位数字以外的所有字符,如下所示。

0001.jpg
0002.jpg
0003.jpg
0004.jpg

我们如何使用linux命令重命名多个文件?

标签: linux

解决方案


一个简单的方法是列出所需的文件名,将列表传递sed给以构建一组mv命令,然后将其输出传递给bashshell 以运行它:

 ls -1 *.jpg | sed 's/\(....\).*\.jpg/mv "&" \1.jpg/' | bash

一点一点:

  • ls -1 *.jpg.jpg
    -1- 列出名称以确保ls每行放置一个文件名结尾的所有文件。最终命令中不需要它;ls当它的输出不是发送到屏幕而是发送到文件或管道时,它会自行执行此操作,但在开发命令行时它很方便。
  • | sed 's/^\(....\).*\.jpg/mv "&" \1.jpg/'- 通过搜索 () 以四个字符 () 开头的行后跟零个或多个我们不关心的字符 () 后跟 JPEG 文件名终止 () 的行的输出lssed并将s///匹配.....*部分\.jpg替换为mv后跟整个匹配字符串&和第一个匹配组(\1,它包含匹配的子字符串,\(....\)即输入行的前 4 个字符)和.jpg.
    这会将输入中的每个文件名替换为一个mv命令,该命令将通过仅保留其前 4 个字符和.jpg终止来重命名它。输入文件名用引号括起来,以允许文件名包含空格。
  • | bash- 将命令传递给将运行它们并退出的解释器mv的新实例。 建议省略这部分命令行,以检查命令生成的输出的正确性(试运行)。如果对您来说看起来不错,那么您可以添加此部分以实际运行重命名(在这种情况下,命令不会显示在屏幕上,而是会执行)。bash
    sedmv

推荐阅读