从终端重命名文件扩展名无法按预期工作



我有一堆文件是这样命名的:

file.jpg?sw=450&sh=450

我想批量重命名它们,删除那个可怕的扩展名并得到这个:

file.jpg

我尝试了这个脚本:

for file in *'.jpg?sw=450&sh=450'; do mv "$file" "${file%}".jpg; done

还有这个脚本:

for file in *'.jpg?sw=450&sh=450'; do mv "$file" "${file%}'.jpg?sw=450&sh=450'".jpg; done

发生的情况是我得到这个结果:

文件.jpg?SW=450&SH=450.jpg

Bash 是一种方法,尽管我可能会考虑使用rename,它根据正则表达式重命名。 考虑:

$ rename 's/.jpg?.*$/.jpg/' *.jpg?*

这说:

  • 给定与全球*.jpg?*匹配的文件
  • 替换
  • 文件名中出现的.jpg,这些后面有一个问号,并将后面的所有字符替换到末尾:/.jpg?.*$/
  • 使用简单的字符串.jpg

最新更新