URI를 생성하려는 파일이 많습니다. 나는 이것을 할 수있는 유닉스에서 명령을 찾고있다.유닉스에서 로컬 파일에 대한 URI를 생성 하시겠습니까?
일부 파일에는 URI와 같은 적절한 기호 (예 : % 20)가 포함되어야하는 공백과 같은 특수 문자가 있습니다. 유닉스에 로컬 파일의 절대 URI를 얻기위한 명령이 있는가? 출력
file:path/to/file/file%20with%20spaces.pdf
URI를 생성하려는 파일이 많습니다. 나는 이것을 할 수있는 유닉스에서 명령을 찾고있다.유닉스에서 로컬 파일에 대한 URI를 생성 하시겠습니까?
일부 파일에는 URI와 같은 적절한 기호 (예 : % 20)가 포함되어야하는 공백과 같은 특수 문자가 있습니다. 유닉스에 로컬 파일의 절대 URI를 얻기위한 명령이 있는가? 출력
file:path/to/file/file%20with%20spaces.pdf
이 질문에 태그가있는 유일한 프로그래밍 언어를 제공
geturi "file with spaces.pdf"
의 라인을 따라 뭔가 떠들썩한 파티입니다.
$ 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") # 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"
, 그것은 다음과 같습니다 그래서 여기에 떠들썩한 솔루션입니다 위의 줄은 공백과 같습니다. 복잡성의 작은 증가
, 그러나, 우리는 훨씬 더 일반적인 버전을 얻을 수 있습니다 :#!/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입니다.
링크 here에 따르면 이 작동합니다 :
ls -1 $PWD/*.pdf| awk '{old=$0;gsub(/ /,"%20",$0);print "file:"$0}'
을 내가 원하는 정확히. 나는 다른 언어를 고려하지 않았지만, 호기심 때문에 더 간단한 방법이있을 수 있습니다 (다른 언어 일 수도 있습니다). – shyamupa
좋습니다. perl과 python ([urllib] (http://docs.python.org/2/library/urllib.html) 참조)과 같은 언어는이를 수행하는 라이브러리 함수와 함께 제공됩니다. 위의 내용이 원하는대로 수행 할 경우 합병증을 추가 할 필요가 없습니다. – John1024