linux - 重命名多个文件以删除 Linux 中的多余字符
问题描述
在一个目录中,我有多个以四位数开头的文件。我使用了重命名命令,但缺少其他命令。我想删除其余的字符,只留下四位数字。
以下是文件示例
0001tashi.jpg
0002tsering.jpg
0003dolma.jpg
0004samdupdorjee.jpg
我想删除除前四位数字以外的所有字符,如下所示。
0001.jpg
0002.jpg
0003.jpg
0004.jpg
我们如何使用linux命令重命名多个文件?
解决方案
一个简单的方法是列出所需的文件名,将列表传递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/'
- 通过搜索 () 以四个字符 () 开头的行后跟零个或多个我们不关心的字符 () 后跟 JPEG 文件名终止 () 的行的输出ls
,sed
并将s///
匹配....
的.*
部分\.jpg
替换为mv
后跟整个匹配字符串&
和第一个匹配组(\1
,它包含匹配的子字符串,\(....\)
即输入行的前 4 个字符)和.jpg
.
这会将输入中的每个文件名替换为一个mv
命令,该命令将通过仅保留其前 4 个字符和.jpg
终止来重命名它。输入文件名用引号括起来,以允许文件名包含空格。| bash
- 将命令传递给将运行它们并退出的解释器mv
的新实例。 建议省略这部分命令行,以检查命令生成的输出的正确性(试运行)。如果对您来说看起来不错,那么您可以添加此部分以实际运行重命名(在这种情况下,命令不会显示在屏幕上,而是会执行)。bash
sed
mv
推荐阅读
- javascript - 为什么 Cloud Firestore 的 where 功能不起作用
- anaconda - 我不断得到 ResolvePackageNotFound
- java - 检查方法参数是否为子类型失败
- java - PDF 文件生成。爪哇
- javascript - 自定义 SweetAlert 按钮的问题
- git - 为什么拉子分支会覆盖父分支上的更改?
- android - 调用 SmoothScrollTo(0, 0) 时如何停止 NestedScrollView 滚动
- javascript - 用 JavaScript 替换多个 HTML DOM 元素中的多个类?
- amazon-web-services - 在本地运行现有的 AWS Lambda
- sql - 来自父子层次结构的平面表