我的文件夹中有大量 .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
。如果文件名匹配,我们将其拆开进行重命名。后缀包含句点,因此我们将其单独保存,以便去除前缀中的任何句点。删除所有非字母数字或空格的内容后,我们用破折号替换所有空格。然后为命令重建文件名mv
;echo
如果结果看起来正确,请删除。
如果您希望在原始文件名中保留破折号,请将最后两个分配替换prefix
为以下内容:
prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}