在目录中,我有多个以四位数开头的文件。我使用了重命名命令,但是缺少其他命令。我想删除其余字符,只留下四位数。
以下是文件样本
0001tashi.jpg
0002tsering.jpg
0003dolma.jpg
0004samdupdorjee.jpg
我要删除除前四位以外的所有字符,如下所示。
0001.jpg
0002.jpg
0003.jpg
0004.jpg
我们如何使用linux命令重命名多个文件?
答案 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
命令在这种情况下将不会显示在屏幕上,而是会执行)。