如何删除文件名中的转义字符?

时间:2012-01-09 22:22:51

标签: linux perl bash

我想从文件名中删除转义字符,所以这些示例

=Web_Help_Desk_Pro%26Lite.pdf
=Windows_7_%2b_s-drev.pdf

会变成

=Web_Help_Desk_ProLite.pdf
=Windows_7__s-drev.pdf

有人知道如何在Perl或BASH中执行此操作吗?

6 个答案:

答案 0 :(得分:3)

如果$file是您的文件名:

my $file = '=Web_Help_Desk_Pro%26Lite.pdf';
$file =~ s/%[0-9a-f]{2}//gi;

即。用空字符串替换%后跟两个十六进制字符。

答案 1 :(得分:2)

要删除百分号和以下两个十六进制数字:

$path =~ s/%[\da-f][\da-f]//gi;

答案 2 :(得分:2)

这应该有效

sed 's/%[[:alnum:]]\{2\}//g' INPUT_FILE

答案 3 :(得分:2)

基于你所有的帮助,我想出了

for f in $(find . -name \*.html); do
   mv $f $(echo $f | sed 's/%[a-z0-9][a-z0-9]//gi')
done

答案 4 :(得分:0)

如果你不介意依赖,那就有一个命令'convmv':

convmv --unescape --notest <files>

答案 5 :(得分:0)

试试这个:

rename 's/\r//' *.html