重命名多个文件,在Linux中删除多余的字符

时间:2018-06-26 09:24:50

标签: linux

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

以下是文件样本

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

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

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

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

1 个答案:

答案 0 :(得分:0)

一种简单的方法是列出所需的文件名,将列表通过管道传输到sed以构建一组mv命令,然后将其输出管道传输到bash shell来运行它:

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

一个接一个:

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