2012-01-17 2 views
1

디렉토리를 이동하고 파일의 이름을 바꾸는 스크립트를 작성하려고합니다. 파일 이름과 확장자를 따로 따로 추출 할 수 있기를 원하지만 파일 경로에 ÅÄÖ와 같은 공백이나 스웨덴어 UTF8 문자가 포함되어 있으면 문제가됩니다.bash에서 UTF 문자로 작업하기

그래서 여기에 파일 이름 + 확장명을 추출하기위한 스 니펫이 있지만 UTF-chars 또는 공백이없는 경로에서 작동하는 것을보고 있으므로 올바르게 탈출하지 못한다고 생각하고 있습니다. 변수.

아마도 내가 잘못하고 있습니다. UTF8 문자 및 공백 문자가있는 경로로이 작업을 수행하기 위해 수행 할 수있는 작업에 대한 아이디어가 있습니까?

for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do 

    FULLPATH="$file" 
    FILENAME=${FULLPATH##*/} 
    FILEEXTENSION=${FILENAME##*.} 
    BASEDIRECTORY=${FULLPATH%$FILENAME} 

    #Log the vars for debugging 
    echo "$FULLPATH" >> ~/Desktop/log.txt 
    echo "$FILENAME" >> ~/Desktop/log.txt 
    echo "$FILEEXTENSION" >> ~/Desktop/log.txt 
    echo "$BASEDIRECTORY" >> ~/Desktop/log.txt 

done 
+0

코드 조각은 괜찮지 만, 방법'$ NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'가 여러 경로를 포함 할 수는 없다, 그들 중 일부는 인용했다. 이 변수를 피할 수있는 방법이 있습니까? – tripleee

+0

... 음, 물론 불가능하지는 않지만, 물론 문제의 원인 일 가능성이 큽니다. – tripleee

답변

2

문제는 NAUTILUS_SCRIPT_SELECTED_FILE_PATH 변수가 new-line escaped per item 것입니다.

당신은 사용할 필요가 : 당신이 게시

while read file; do 

    FULLPATH="$file" 
    FILENAME=${FULLPATH##*/} 
    FILEEXTENSION=${FILENAME##*.} 
    BASEDIRECTORY=${FULLPATH%$FILENAME} 

    #Log the vars for debugging 
    echo "$FULLPATH" >> ~/Desktop/log.txt 
    echo "$FILENAME" >> ~/Desktop/log.txt 
    echo "$FILEEXTENSION" >> ~/Desktop/log.txt 
    echo "$BASEDIRECTORY" >> ~/Desktop/log.txt 

done <<<"$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" 
+0

+1 논평하기 전에 NAUTILUS_SCRIPT_SELECTED_FILE_PATH에서 읽으 려하지 않았습니다. – tripleee

0

내가 my dotfiles이있다 :이 구성으로

# Prefer US English and use UTF-8 
export LC_ALL="en_US.UTF-8" 
export LANG="en_US" 

, 그것을 작동하는 것 같다 :

$ ls -l 
total 0 
drwxr-xr-x 2 Mathias staff 68 Jan 17 11:32 test space test 
drwxr-xr-x 2 Mathias staff 68 Jan 17 11:29 test©test 
$ for file in *; do echo "$file"; done 
test space test 
test©test 
관련 문제