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

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

我在这里遗漏了什么,这看起来很简单,但我无法让它工作。

我有一个目录,其中包含类似 AGPNDRAH01.jpg 的文件

我想要一个包含类似 AGPNDRAH01_00.jpg 的文件的目录

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

不起作用。Centos linux。我不明白为什么它不起作用。

答案1

快速破解将执行您在 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

答案2

尝试以下 bash 脚本:

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

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

答案3

正则表达式末尾的双反斜杠意味着s替代s/(\w+).jpg$1_00.jpg$带有一个空字符串。

我用的是这个:

rename 's/\.jpg/_00.jpg/' *.jpg

答案4

我有一个 redhat 版本,rename 不支持 's/' 命令。这里有一行代码(您必须使用反斜杠括号和加号才能在 sed 中使用此功能):

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

相关内容