如何使用 shell 命令用下划线替换一堆文件名中的 % 编码字符?

如何使用 shell 命令用下划线替换一堆文件名中的 % 编码字符?

我下载了很多文件,其中一些包含无效字符,编码为类似于%2C...%2F

我试过了rename 's/%[0-9][A-Z]/_/g *rename 's/\%[0-9][A-Z]/_/g *但他们什么也没做。(抱歉,我的错。rename有效。我输入了一些拼写错误或与全角/半角字符相关的内容... ONZ..........请投票关闭此问题

例如,文件名file,1.pdf, file/2.pdf... 编码为file%2C1.pdf, file%2F2.pdf。我想将它们重命名为file_1.pdf, file_2.pdf,...

答案1

您可以使用:

rename 's/%/_/g' *

首先使用-n选项(试运行)运行它以确保一切正常:

rename -n 's/%/_/g' *

要捕获数字:

rename -n 's/%[0-9]/_/g' *

甚至使用类似的方法来删除除字母数字之外的所有字符:

$ rename -n 's/[^a-zA-z0-9]/_/g' *
rename(%SOME%2FFOR%, _SOME_2FFOR_)
rename(SOME%2FFOR, SOME_2FFOR)
rename(SOME%2FFOR%, SOME_2FFOR_)

答案2

使用以下脚本,复制脚本并将其保存为/binrenamer.sh然后任何时候您想对此类文件进行任何重命名,请使用简单命令renamer.sh #Input files#

#!/bin/bash

for input in $@;
    do 
        inputMod=$( echo "$input" | sed 's/\(%\)/\_/pg' );
        mv "$input" "$inputMod" &> /dev/null; 
        shift; 
    done;

相关内容