通过删除字母重命名shell中的文件

时间:2017-01-14 15:34:45

标签: linux shell

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

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

但是我无法找到我想要的命令。

3 个答案:

答案 0 :(得分:1)

使用shell参数扩展:

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

以下是使用tr

的oneline解决方案
 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..末尾有一个点,不属于a-zA-Z间隔)并将此值分配给变量$n。 Ť

然后我们可以将$f重命名为${n}jpg。那就是它。

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