Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 通过删除字母从shell重命名文件_Linux_Shell - Fatal编程技术网

Linux 通过删除字母从shell重命名文件

Linux 通过删除字母从shell重命名文件,linux,shell,Linux,Shell,我有很多jpg文件,名字里有字母和数字。我想删除所有字母,例如abc12d34efg.jpg变成1234.jpg。对于For循环,我认为: for i in *.jpg; do mv "$i" ... 但是我找不到我想要的命令。这里有一个使用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="$

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

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

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

这里有一个使用
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-da-zA-Z
删除名称中的所有字母。从
abc12d34efg.jpg
中,我们得到
1234.
(末尾的点为
不属于
a-z
a-z
区间)并将该值赋给变量
$n
。T

然后我们可以将
$f
重命名为
${n}jpg
。就这样


更新要同时删除小写和大写字母,请使用
tr-da-zA-Z
,要仅删除小写字母,请使用
tr-da-Z

这里是一个使用
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-da-zA-Z
删除名称中的所有字母。从
abc12d34efg.jpg
中,我们得到
1234.
(末尾的点为
不属于
a-z
a-z
区间)并将该值赋给变量
$n
。T

然后我们可以将
$f
重命名为
${n}jpg
。就这样


更新若要删除小写和大写字母,请使用
tr-da-zA-Z
,若要仅删除小写字母,请使用
tr-da-Z

使用shell参数展开:

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

“${fname//[:alpha:][]}”
是对所有出现的
[[:alpha:][]
(任何字母)的替换,不带任何内容。因为这也会删除
jpg
,所以我们必须再次添加它–附加的
jpg
会这样做。

使用shell参数展开:

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

“${fname//[:alpha:][]}”
是对所有出现的
[[:alpha:][]
(任何字母)的替换,不带任何内容。因为这也会删除
jpg
,所以我们必须再次添加它–附加的
jpg
会这样做。

您可以使用sed使用regex将所有字母替换为零

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

您可以使用sed使用regex将所有字母替换为零

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

非常感谢。它的工作,但我不得不执行另一个循环的大写字母,无论如何非常好的解释@druido82欢迎使用堆栈溢出。如果答案解决了您的问题,欢迎您通过勾选答案旁边的复选标记来接受。谢谢!它的工作,但我不得不执行另一个循环的大写字母,无论如何非常好的解释@druido82欢迎使用堆栈溢出。如果某个答案解决了您的问题,欢迎您通过勾选答案旁边的复选标记来接受该答案。有点离题,但可能有用:有一个名为mmv的命令,用于实现您的目标,不会有数据丢失的风险。有点离题,但可能有用:有一个名为mmv的命令,用于实现您的目标,没有数据丢失的风险。如果文件名包含空格将失败如果文件名包含空格将失败