[英]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.
(在末端的一个点.
不会在属于az
和AZ
间隔),并指定这个值变量$n
。 Ť
然后,我们可以将$f
重命名$f
${n}jpg
。 而已。
更新以删除小写字母和大写字母,请使用tr -d a-zA-Z
,仅删除小写字母,请使用tr -d az
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.