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

Bash 在Unix中为本地文件生成URI?,bash,unix,Bash,Unix,我有很多文件要为其生成URI。我正在unix中寻找一个可以执行此操作的命令 某些文件具有特殊字符,如URI应包含相应符号的空格(如%20)。unix中是否有获取本地文件的绝对URI的命令。类似于 geturi“带空格的文件.pdf” 它给出了输出 文件:路径/to/file/file%20with%20spaces.pdf 这个问题唯一标记的编程语言是bash。下面是一个bash解决方案: #!/bin/bash fname=$(readlink -f "$1") # get full p

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

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


geturi“带空格的文件.pdf”

它给出了输出


文件:路径/to/file/file%20with%20spaces.pdf

这个问题唯一标记的编程语言是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
以及

在上面的代码中,需要替换的每个字符都需要一行类似于上面的空格行

但是,对于复杂性的少量增加,我们可以得到一个更通用的版本:

#!/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}"
#/bin/bash
fname=$(readlink-f“$1”)
nchars=${fname}
encoded=“”
对于((i=0;i根据链接:
这应该起作用:

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

我不想考虑其他语言,但出于好奇,有一种更简单的方法(可能是另一种语言)好吗?像Perl和Python(参见)这样的语言附带了库函数。
ls -1 $PWD/*.pdf| awk '{old=$0;gsub(/ /,"%20",$0);print "file:"$0}'