不带任何内容重命名文件中的非字母和数字字符

不带任何内容重命名文件中的非字母和数字字符

我的文件夹中有大量 .jpg 文件,其中包含非字母字符等! , ( ) ^ & .

我需要重命名这些文件,以便任何不存在的内容都A-Z a-z 0-9被替换为任何内容。此外,空格应替换为-也以 .mp4$$$.jpg 结尾的文件,这部分需要保持不变。

例如,如果该文件被称为

ask me anything.mp4001.jpg
ask, me. anything! 2.mp4001.jpg

文件名应更改为

ask-me-anything.mp4001.jpg
ask-me-anything-2.mp4001.jpg

答案1

使用 bash,你可以这样做:

for f in *.jpg
do
  if [[ $f =~ ^(.*)(\.mp[[:digit:]]+\.jpg) ]]
  then
    prefix=${BASH_REMATCH[1]}
    suffix=${BASH_REMATCH[2]}
    prefix=${prefix//[^[:alnum:] ]/}
    prefix=${prefix// /-}
    echo mv -- "$f" "${prefix}${suffix}"
  fi
done

这会循环遍历*.jpg文件,并尝试将每个文件名与以下模式进行匹配: (anything) 后跟.mp(一个或多个数字) .jpg。如果文件名匹配,我们将其拆开进行重命名。后缀包含句点,因此我们将其单独保存,以便去除前缀中的任何句点。删除所有非字母数字或空格的内容后,我们用破折号替换所有空格。然后为命令重建文件名mvecho如果结果看起来正确,请删除。

如果您希望在原始文件名中保留破折号,请将最后两个分配替换prefix为以下内容:

prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}

相关内容