13

我熟悉重命名,但我很好奇重命名是否仍然适用于删除重复的扩展名?

假设我有几个文件名为:

  • 图片2.jpg.jpg
  • 图片9.jpg.jpg
  • 图片3.jpg.jpg
  • 图片6.jpg.jpg

您将如何删除重复的扩展名?

最终结果:

  • 图片2.jpg
  • 图片9.jpg
  • 图片3.jpg
  • 图片6.jpg
4

3 回答 3

19

假设:

  • 您只想在当前工作目录中执行此操作(非递归)
  • 双扩展名的格式精确为.jpg.jpg

然后以下脚本将起作用:

#!/bin/bash

for file in *.jpg.jpg
do
    mv "${file}" "${file%.jpg}"
done

解释:

要使用此脚本:

  • clean_de.sh在该目录中创建一个名为的新文件
  • 将其设置为可执行chmod +x clean_de.sh
  • 然后运行它./clean_de.sh

警告说明

正如@gniourf_gniourf 所指出的,-n如果您mv支持,请使用该选项。

否则 - 如果您在同一目录中,它将重命名为a.jpg并在此过程中覆盖已经存在而不发出警告。a.jpg.jpga.jpg.jpga.jpga.jpg

于 2012-11-23T20:33:30.657 回答
4

一行重命名命令也应该足够了(至少对于您的情况):

rename 's/\.jpg\.jpg$/.jpg/' *.jpg.jpg
于 2012-11-24T08:07:52.140 回答
1

对于这个问题,这是一个更通用但仍然很简单的解决方案:

for oldName in `find . -name "*.*.*"`; do newName=`echo $oldName | rev | cut -f2- -d'.' | rev`; mv $oldName $newName; done

简短说明:
find . -name "*.*.*- 这将仅递归查找具有重复扩展名的文件

echo $oldName | rev | cut -f2- -d'.' | rev- 诀窍发生在这里:rev 命令对字符串执行反向操作,因此您现在可以看到,您想要从第一个点开始的整个文件名。(gpj.gpj.fdsa)

mv $oldName $newName- 实际重命名文件

发行说明:由于是简单的一行脚本,所以可以找到未处理的案例。文件名中带有额外点的文件、超深目录结构等。

于 2012-11-24T09:38:26.357 回答