【问题标题】:Removing changing pattern from filenames in directory in Linux从 Linux 目录中的文件名中删除更改模式
【发布时间】:2020-08-28 12:38:50
【问题描述】:

我有一个包含遵循以下命名约定的文件的目录:

Label_0000_AA.gz
Label_0001_BB.gz
Label_0002_CC.gz
...

我要做的就是重命名这些文件,以便删除 _#### 数字模式,结果是:

Label_AA.gz
Label_BB.gz
Label_CC.gz
...

但仅限于一定数量。例如:我可能有 10000 个文件,但可能只想删除前 3000 个中的模式。这可以使用 bash 之类的东西吗?

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    如果您没有prenamerename -
    (假设名称一致)

    for f in Label_[0-9][0-9][0-9][0-9]_[A-Z][A-Z].gz
    do mv "$f" "${f//_[0-9][0-9][0-9][0-9]/}"
    done 
    

    只做一定的范围-

    for n in {0000..2999}
    do  for f in Label_${n}_??.gz
        do  mv $f ${f//_$n/}
        done
    done
    

    你确定没有碰撞?

    【讨论】:

      【解决方案2】:

      如果您可以在正则表达式中命名要更改/删除的模式,则可以使用命令prename

      prename 's/_[0-3][[:digit:]]{3}_/_/g' Label_*.gz
      

      这个正则表达式只会删除数字 0000-3999。

      使用标志 -n 进行“试运行”并显示它会做什么。

      编辑:感谢@KamilCuk 提醒我两个renames。我说清楚了,把名字改成了prename

      【讨论】:

      • 我试试看,谢谢!假设我想精确删除 0399,下面的语法会起作用吗? rename 's/_[0][0-3][[:digit:]]{2}_/_/g' Label_*.gz
      • 注意有两个renames - util linux renameperl rename
      • 我的 git bash 仿真中没有这些。
      猜你喜欢
      • 2019-07-03
      • 2023-03-20
      • 2014-01-06
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      相关资源
      最近更新 更多