我熟悉重命名,但我想知道重命名是否适用于删除重复的扩展名?
假设我有几个文件,它们的名称如下:
- picture2.jpg.jpg
- picture9.jpg.jpg
- picture3.jpg.jpg
- picture6.jpg.jpg
如何删除重复的扩展名?
最终结果:
- picture2.jpg
- picture9.jpg
- picture3.jpg
- picture6.jpg
假设:
.jpg.jpg
:那么以下脚本将起作用:
#!/bin/bash
for file in *.jpg.jpg
do
mv "${file}" "${file%.jpg}"
done
解释:
${file%.jpg}
:这部分被称为参数替换。使用此脚本的方法:
clean_de.sh
的新文件chmod +x clean_de.sh
将其设置为可执行文件./clean_de.sh
运行它警告:
如@gniourf_gniourf所指出,如果您的mv
支持,则使用-n
选项。
否则,如果您在同一目录中有a.jpg
和a.jpg.jpg
,它将重命名a.jpg.jpg
为a.jpg
并覆盖已存在的a.jpg
,而不发出警告。
rename 's/\.jpg\.jpg$/.jpg/' *.jpg.jpg
这里有一个更一般化但仍然简单的解决方案:
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
- 实际重命名文件
发布说明:由于这是一个简单的一行脚本,您可能会发现未处理的情况。文件名中带有额外的点、超深的目录结构等。
mv
命令有-n
选项(不覆盖选项),你可以使用它,以防目标文件已经存在。 - gniourf_gniourf