我有很多文件要为其生成URI。我在unix中寻找一个可以执行此操作的命令。
某些文件具有特殊字符,例如URI应包含相应符号的空格(如%20)。在unix中是否有命令来获取本地文件的绝对URI。
的内容
geturi "file with spaces.pdf"
给出输出
file:path/to/file/file%20with%20spaces.pdf
答案 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}"
答案 1 :(得分:0)
根据链接here: 这应该有效:
ls -1 $PWD/*.pdf| awk '{old=$0;gsub(/ /,"%20",$0);print "file:"$0}'