繁体   English   中英

通过删除字母从外壳重命名文件

[英]Renaming files from shell by removing letters

我有很多jpg文件,其名称中包含字母和数字。 我想删除所有字母,例如abc12d34efg.jpg变成1234.jpg 对于for循环,我认为:

 for i in *.jpg; do mv "$i" ...

但是我找不到想要的命令。

使用shell参数扩展:

for fname in *.jpg; do mv "$fname" "${fname//[[:alpha:]]}jpg"; done

"${fname//[[:alpha:]]}"将所有出现的[[:alpha:]] (任何字母)替换为空。 因为这也会删除jpg ,所以我们必须再次添加它-附加的jpg

您可以使用sed使用正则表达式将所有字母替换为空。

for i in *.jpg; do mv $i `echo $i | sed -e 's/[a-zA-Z]//g'`jpg; done

这是一个使用tr的单线解决方案

 for f in *.jpg ; do n="$(echo ${f} | tr -d a-zA-Z )" ; mv "$f" "${n}jpg" ; done

经过一些格式化,它看起来像

 for f in *.jpg ; do 
   n="$(echo ${f} | tr -d a-zA-Z )" 
   mv "$f" "${n}jpg"
 done

这是正在发生的事情:

首先,我们使用tr -d a-zA-Z从名称中删除所有字母。 abc12d34efg.jpg我们得到1234. (在末端的一个点.不会在属于azAZ间隔),并指定这个值变量$n Ť

然后,我们可以将$f重命名$f ${n}jpg 而已。

更新以删除小写字母和大写字母,请使用tr -d a-zA-Z ,仅删除小写字母,请使用tr -d az

暂无
暂无

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

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