我想从文件名中删除转义字符,所以这些示例
=Web_Help_Desk_Pro%26Lite.pdf
=Windows_7_%2b_s-drev.pdf
会变成
=Web_Help_Desk_ProLite.pdf
=Windows_7__s-drev.pdf
有人知道如何在Perl或BASH中执行此操作吗?
答案 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