2014-01-08 3 views
1

URI를 생성하려는 파일이 많습니다. 나는 이것을 할 수있는 유닉스에서 명령을 찾고있다.유닉스에서 로컬 파일에 대한 URI를 생성 하시겠습니까?

일부 파일에는 URI와 같은 적절한 기호 (예 : % 20)가 포함되어야하는 공백과 같은 특수 문자가 있습니다. 유닉스에 로컬 파일의 절대 URI를 얻기위한 명령이 있는가? 출력

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

답변

1

이 질문에 태그가있는 유일한 프로그래밍 언어를 제공

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입니다.

+0

을 내가 원하는 정확히. 나는 다른 언어를 고려하지 않았지만, 호기심 때문에 더 간단한 방법이있을 수 있습니다 (다른 언어 일 수도 있습니다). – shyamupa

+1

좋습니다. perl과 python ([urllib] (http://docs.python.org/2/library/urllib.html) 참조)과 같은 언어는이를 수행하는 라이브러리 함수와 함께 제공됩니다. 위의 내용이 원하는대로 수행 할 경우 합병증을 추가 할 필요가 없습니다. – John1024

0

링크 here에 따르면 이 작동합니다 :

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