在Unix中为本地文件生成URI?

时间:2014-01-08 06:47:14

标签: bash unix

我有很多文件要为其生成URI。我在unix中寻找一个可以执行此操作的命令。

某些文件具有特殊字符,例如URI应包含相应符号的空格(如%20)。在unix中是否有命令来获取本地文件的绝对URI。

的内容

geturi "file with spaces.pdf"

给出输出

file:path/to/file/file%20with%20spaces.pdf

2 个答案:

答案 0 :(得分:1)

这个问题被标记的唯一编程语言是bash。所以这是一个bash解决方案:

#!/bin/bash
fname=$(readlink -f "$1") # get full path
fname=${fname//%/%25}     # Substitute for percent signs
fname=${fname// /%20}     # Substitute for spaces
fname=${fname//+/%2B}     # Substitute for plus signs
echo "file:$fname"

在操作中,它看起来像:

$ geturi  file\ with\ spaces.pdf
file:/path/to/file/file%20with%20spaces.pdf

$ bash geturi.sh file\ with\ spaces+%.pdf 
file:/path/to/file/file%20with%20spaces%2B%25.pdf

在上面的代码中,每个需要替换的字符都需要像上面那样的空格。

然而,为了使复杂性略有增加,我们可以获得更通用的版本:

#!/bin/bash
fname=$(readlink -f "$1")
nchars=${#fname}
encoded=""
for (( i=0 ; i<nchars ; i++ )); do
    c=${fname:$i:1}
    case "$c" in
        [-_.~a-zA-Z0-9/]) o="$c" ;;
        *)               printf -v o '%%%02x' "'$c"
    esac
    encoded+="$o"
done
echo "file:${encoded}"

管理URI引用的标准是RFC2396。问题字符及其替换的良好列表是here

答案 1 :(得分:0)

根据链接here: 这应该有效:

ls -1 $PWD/*.pdf| awk '{old=$0;gsub(/ /,"%20",$0);print "file:"$0}'