[英]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 之类的东西可以吗?
如果你没有prename
或rename
-
(假设名称一致)
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.