【问题标题】:Can bash be used to rename by pattern? [duplicate]bash可以用来按模式重命名吗? [复制]
【发布时间】:2020-12-11 08:01:46
【问题描述】:

我有文件:

alpha_123_abc_file.txt
beta_456_def_file.txt
gamma_789_ghi_file.txt

有没有办法重命名所有以剪切第一个 _ 字符之后的部分?成为:

123_abc_file.txt
456_def_file.txt
789_ghi_file.txt

我研究了 perl 工具,但我不确定它是否有能力搜索出这样的模式。

【问题讨论】:

  • 给定您发布的输入文件名,如果在您尝试重命名alpha_123_abc_file.txt123_abc_file.txt 已经存在,会发生什么情况?
  • @EdMorton 我认为文件冲突不会成为问题。这些文件位于一个临时项目目录中,因此一次只有几个。
  • Perl 是一种通用编程语言,所以是的,它具有这种能力。 (关于“Python 工具”、“Java 工具”、“C++ 工具”等,我可以说同样的话。)你是要我们为你写一个 Perl 程序吗?
  • @user1081491 只需要 2 个。如果您在该目录中有 foo_123_abc_file.txtbar_123_abc_file.txt,则第一个重命名可以,但第二个重命名会尝试覆盖第一个。
  • @user1081491:回复:“perl 将重命名像 _ 字符这样的关键词”:您有指向您所指内容的链接吗?因为正如我所说,Perl 是一种通用编程语言。它可以使用您可能想要用来设置文件名的任意逻辑将任何内容重命名为任何内容。这不是“查找代码”的情况,而是“编写代码”的情况。

标签: bash perl rename


【解决方案1】:
for file in *_*; do echo mv -- "$file" "${file#*_}"; done

当您完成测试并准备好实际执行 mv 时,删除 echo

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2021-11-03
    • 2018-01-22
    • 1970-01-01
    • 2019-05-29
    • 2012-02-27
    • 2017-07-28
    • 1970-01-01
    相关资源
    最近更新 更多