如何删除文件名中带有空格的字母的最后一个字符组合

如何删除文件名中带有空格的字母的最后一个字符组合

在终端中,我尝试重命名文件夹中文件名末尾包含空格和数字组合的所有文件。文件名的末尾包含空格和数字的组合(例如“12334”),我需要删除 .mp3 之前的任何数字和空格。

例如:

  • filename 1234567.mp3
  • my file 123.mp3
  • your file 98.mp3

更名为:

  • filename.mp3
  • my file.mp3
  • your file.mp3

答案1

巴什

$ touch 'filename 1234567.mp3' 'my file 123.mp3' 'your file 98.mp3' 1234.mp3 zzz.mp3

$ for f in *.mp3; do
    g=${f%%[[:space:]]+([[:digit:]]).mp3}
    if [[ $f != $g ]]; then
        mv -v -- "$f" "$g.mp3"
    fi
done
renamed 'filename 1234567.mp3' -> 'filename.mp3'
renamed 'my file 123.mp3' -> 'my file.mp3'
renamed 'your file 98.mp3' -> 'your file.mp3'

$ ls
1234.mp3   filename.mp3  'my file.mp3'  'your file.mp3'   zzz.mp3

这使用了 bash 的延长图案匹配文件名末尾的空格后跟 1 个或多个数字,后跟“.mp3”。

答案2

zsh

首先,将函数标记为自动加载(如果您要经常使用该函数,则zmv最好):~/.zshrc

autoload -Uz zmv

然后:

zmv -n '(**/)(*)( *)(.mp3)' '$1$2$4'

如果满意,请删除-n(试运行)。

仅当最后一个空格之后的部分是十进制数字序列时才重命名文件:

zmv -n '(**/)(*)( <->)(.mp3)' '$1$2$4'

(或仅<98-1234567>代替<->该范围内的数字)。

匹配(**/)任何级别的子目录。如果您只想重命名当前目录中的文件,那么只需:

zmv -n '(*)( *)(.mp3)' '$1$3'

相关内容