【发布时间】:2012-11-12 04:32:44
【问题描述】:
我对重命名很熟悉,但我很好奇重命名是否仍然适用于删除重复的扩展名?
假设我有几个文件名为:
- picture2.jpg.jpg
- picture9.jpg.jpg
- picture3.jpg.jpg
- picture6.jpg.jpg
您将如何删除重复的扩展名??
最终结果:
- 图片2.jpg
- 图片9.jpg
- 图片3.jpg
- 图片6.jpg
【问题讨论】:
我对重命名很熟悉,但我很好奇重命名是否仍然适用于删除重复的扩展名?
假设我有几个文件名为:
您将如何删除重复的扩展名??
最终结果:
【问题讨论】:
假设:
.jpg.jpg 完全相同:那么下面的脚本就可以工作了:
#!/bin/bash
for file in *.jpg.jpg
do
mv "${file}" "${file%.jpg}"
done
说明:
${file%.jpg}:这部分叫Parameter Subsitution.
要使用此脚本:
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 而不会发出警告。
【讨论】:
mv 有-n 选项(没有clobber 选项),你可以使用它,以防目标文件已经存在。
一行重命名命令也应该足够了(至少对于你的情况):
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 - 实际重命名文件
发行说明:因为它是一个简单的单行脚本,你可以找到未处理的案例。文件名中带有额外点的文件、超深目录结构等。
【讨论】: