批量重命名文件名以删除最后一个“-”后的部分,忽略扩展名

批量重命名文件名以删除最后一个“-”后的部分,忽略扩展名

我想批量重命名某个文件夹中的文件,删除最后一个之后的部分-,方法如下。

  • hello world - Mr Sheephello world
  • super user - question on super user.docxsuper user.docx
  • abc - def - ghi jkl.pdfabc - def.pdf

我更喜欢命令行解决方案,但其他选项也可以。

答案1

要删除最后一个,-就像${f% - *}在 bash 中一样,${var%Pattern}它将删除变量末尾最短的模式。有关更多信息,请阅读参数替换.结果如下

for f in path/*
do
    if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi
    echo mv "$f" "${f% - *}$ext"
done

验证新文件名正确后,您可以删除它echo以进行真正的重命名。演示:

$ for f in "hello world - Mr Sheep" "super user - question on super user.docx" "abc - def - ghi jkl.pdf"; do if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi; echo mv "'$f'" "'${f% - *}$ext'";  done
mv 'hello world - Mr Sheep' 'hello world'
mv 'super user - question on super user.docx' 'super user.docx'
mv 'abc - def - ghi jkl.pdf' 'abc - def.pdf'

相关内容