繁体   English   中英

从 Linux 目录中的文件名中删除更改模式

[英]Removing changing pattern from filenames in directory in Linux

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

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

我想要做的就是重命名这些文件,以便删除 _#### 数字模式,从而导致:

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

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

如果你没有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

你确定没有碰撞?

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

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

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

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

编辑:感谢@KamilCuk 提醒我关于两个rename 我明确表示并将名称更改为prename

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM