Linux: 如何给保持扩展名的文件添加后缀

Linux: How to add a suffix to files maintaining extension

Linuxbash, Centos.

如何给保持扩展名的文件添加后缀? 我可以找到有关如何更改或添加文件扩展名的答案,但找不到有关如何添加后缀以维护扩展名的答案...

例如:如果我想为某个目录下的所有图像文件(.jpg、.png、.gif、.JPEG)添加'_thumb'后缀。

somefile.jpg -> somefile_thumb.jpg

编辑:如果可能,可以重新启动脚本,而不影响那些已经重命名的文件。为了向列表中添加更多扩展。

提前致谢!

您可以使用:

shopt -s nullglob
for f in *.jpg *.png *.gif *.JPEG; do
    [[ $f != *_thumb.* ]] && mv "$f" "${f%.*}_thumb.${f##*.}"
done

在一个细微的变化中,您可以强制删除仅通过以下方式找到的扩展:

mv "$file" "${file%.${file##*.}}_thumb.${file##*.}"

'rename' 命令可能是您要找的:

rename 's/^(.*)\.(png|jpg|gif|JPEG)$/_thumbnail./' *.png *.jpg *.gif *.JPEG

解释:

  • 引号中的第一个参数表示替换:'s/regex-what-to-find/replacement-string/'
  • 此正则表达式匹配以随机字符串开头并以点结尾并附加所列扩展名之一的每个文件名
  • 圆括号中的正则表达式部分会将匹配的子字符串存储到 $1 和 $2 等变量中,用于替换字符串。
  • *.png *.jpg *.gif *.JPEG 仅为文件列表,星号扩展 shell 为完整文件列表。如果目录中只有图像,则只能在此处使用一个星号。