将百分比编码的文件URL转换为bash中的本地文件

时间:2014-11-30 09:56:44

标签: bash url

我有一个百分比编码的文件网址 - 例如file:///home/sashoalm/Has%20Spaces.txt。我需要将其转换为本地文件 - /home/sashoalm/Has Spaces.txt

我怎样才能在bash中做到这一点?

4 个答案:

答案 0 :(得分:2)

Urlencode应该这样做(-d选项)

  

-d根据RFC 1738进行URL解码而不是编码。%HH和%hh字符串被转换,其他字符通过   未经修改,但+被转换为空格。

答案 1 :(得分:2)

在BASH中,您可以使用此实用程序功能:

decodeURL() {
   printf "$(sed 's#^file://##;s/+/ /g;s/%\(..\)/\\x\1/g;' <<< "$@")\n";
}

然后将此功能称为:

decodeURL 'file:///home/sashoalm/Has%20Spaces.txt'
/home/sashoalm/Has Spaces.txt

答案 2 :(得分:2)

Perl救援:

echo file:///home/sashoalm/Has%20Spaces.txt |\
  perl -MURI -MURI::Escape -lne \
      'print uri_unescape(URI->new($_)->path)'

请参阅URIURI::Escape

答案 3 :(得分:1)

GNU awk

#!/usr/bin/awk -fn
@include "ord"
BEGIN {
  RS = "%.."
}
{
  printf RT ? $0 chr("0x" substr(RT, 2)) : $0
}

#!/bin/sh
awk -niord '{printf RT?$0chr("0x"substr(RT,2)):$0}' RS=%..

How to decode URL-encoded string in shell?