【问题标题】:Sed and renaming filessed 和重命名文件
【发布时间】:2019-01-09 08:32:57
【问题描述】:

我在一个目录中有大量文件,每个文件都有不同的名称和不同的长度

一种医生... 218 级 (1080p_30fps_H264-128kbit_AAC).mp4
另一种类型... 223 级 (1080p_30fps_H264-128kbit_AAC).mp4
等等

我只想对“Class 218”“Class 1”等进行排序并重命名这些文件 你们能帮我使用 sed 吗?

【问题讨论】:

  • 1. Sed 不是批量重命名文件的最佳工具。 2. 你应该显示 a) 完整的文件名和 b) 它们之后应该叫什么。 3. 关于文件重命名的问题已经有很多了,你确定这是一个以前没有被问过的独特问题吗?
  • 因此,如果您删除除“Class”之外的所有内容,后跟 1 个或多个数字,您会很好。
  • 嗨本杰明!我是 sed 的新手,我在 stackoverflow 中搜索并找到了一个带有 sed 的示例。但我无法用我得到的样品来做,所以我问好吗?
  • 谢谢马克!听起来不错。
  • 我的回答解决了你的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 meta.stackexchange.com/questions/5234/…

标签: ubuntu sed renaming


【解决方案1】:

我会使用 Perl rename 脚本。因此,在这种特定情况下,我将捕获 "Class" 后跟一个或多个空格和一个或多个数字作为我的捕获组,然后用它重命名文件,同时保留相同的扩展名:

rename --dry-run 's/.*(Class\s+\d+).*/$1.mp4/' *mp4

样本输出

'Another type of ... Class 223 (1080p_30fps_H264-128kbit_AAC).mp4' would be renamed to 'Class 223.mp4'
'Kind of Physician something Class 218 (1080p_30fps_H264-128kbit_AAC).mp4' would be renamed to 'Class 218.mp4'

如果看起来不错,请删除 --dry-run 并再次真正运行。

请注意,在正则表达式中:

  • .* 表示任何重复任意次数的字符或数字,

  • /s+ 表示任何类型的空格(制表符或空格)至少出现一次并且可能不止一次,

  • /d+ 表示任何数字 (0-9) 至少出现一次并且可能不止一次,

  • (...) 表示捕获括号内的所有内容,

  • $1 表示替换为先前在括号中捕获的第一件事。

【讨论】:

  • 非常感谢,我删除了--dry -run(没有运行)。现在我将研究这些参数的含义。非常感谢!
猜你喜欢
  • 2011-08-06
  • 2014-02-17
  • 2019-10-05
  • 2011-06-15
  • 2011-01-23
  • 2013-06-12
  • 2021-06-04
  • 2021-06-11
相关资源
最近更新 更多