Linux重命名文件以在扩展名之前的文件名之后添加_00

我在这里错过了什么,这似乎很简单,但我不能得到它的工作。

我有一个像AGPNDRAH01.jpg文件的目录

我想要一个像AGPNDRAH01_00.jpg这样的文件的目录

rename 's/(\w+).jpg\$1\_00.jpg$//' * 

没有,工作。 Centos Linux。 对我来说没有意义,为什么这不工作。

快速入门将做你在bash中描述的:

 cd /directory for F in `ls -1 |awk -F. '{print $2}'` do mv $F.jpg ${F}_00.jpg done 

重命名用法:

 wmoore@bitbucket(/tmp/dowork)$ ls -1 1.jpg 2.jpg 3.jpg 4.jpg 5.jpg wmoore@bitbucket(/tmp/dowork)$ rename .jpg _00.jpg *.jpg wmoore@bitbucket(/tmp/dowork)$ ls -1 1_00.jpg 2_00.jpg 3_00.jpg 4_00.jpg 5_00.jpg 

尝试下面的bash脚本:

 find . -type f -name "*.jpg" -print | while read FILE do mv "${FILE}" "`dirname ${FILE}`/`basename ${FILE} .jpg`_00.jpg" done 

这将find当前目录中或下面的所有.jpg文件,并在.jpg之前插入_00 。 如果您只想要处理当前目录,请使用find . -maxdepth 1启动find命令find . -maxdepth 1 find . -maxdepth 1

我不熟悉重命名,但你的正则expression式看起来不正确。 看起来好像你正在试图匹配这样的文件名为AGPNDRAH01.jpg.AGPNDRAH01_00.jpg ,并将其名称更改为无。

你确定你不是这个意思吗?

 rename 's/(\w+).jpg$/\$1\_00.jpg/' * 

我有一个红帽的变种,重命名不支持's /'命令。 这是你的一行代码(你必须反斜杠括号和加号来获得sed中的function):

 for fl in *.jpg; do mv $fl `echo $fl | sed 's/\(\w\+\).jpg/\1_00.jpg/'`; done 

你只是在错误的地方斜线和不必要的反斜杠。

 rename 's/(\w+).jpg/$1\_00.jpg/' *