윈도우에서 사용 불가능한 문자를 대체하는 스크립트

좋은 프로그램, 한글화 파일, 그외 유용한 자료들

Moderator: Dry8r3aD

Post Reply
별님
Posts: 577
Joined: 2012/01/11 Wed 9:38 pm
Contact:

윈도우에서 사용 불가능한 문자를 대체하는 스크립트

Post by 별님 » 2013/02/27 Wed 9:14 pm

윈도우에서 사용 불가능한 문자를 대체.sh
[code:3tua2eoj]#!/bin/bash
#윈도우에서 사용 불가능한 문자를 대체문자로 바꿉니다. 단, '/' 문자는 제외합니다.
#단, '.'로 시작하는 폴더 아래의 파일은 제외합니다.

{
echo '=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+'
date

IFS='
'

#작업 대상이 될 위치들을 추출
temp=`find "$(pwd)" -not \( -type d -name ".*" -prune \) -type d`

#역순으로 정렬
last=`echo "$temp" | fgrep -c ''`
countt=$last
for i in `seq $last`
do
temp2=`echo "$temp2"; echo "$temp" | sed -n "${countt}p"`
countt=`expr $countt - 1`
done

#파일 이름을 고침
for i in `echo "$temp2" | sed '1d'`
do
for a in `ls "$i"`
do
f=$(basename "$a" | sed -e 's/\?/?/g' -e 's/\:/:/g' -e 's/\*/*/g' -e 's/\"/"/g' -e 's/</〈/g' -e 's/>/〉/g' -e 's/[|]/│/g' -e 's/[\\]/\/g')
mv -Tv "$i/$a" "$i/$f"
done
done

zenity --info --title '알림' --text '작업이 완료되었습니다.'

echo ''
} 2>&1 | tee -a "/home/carinae/홈폴더/.sys/Log_nautilus-scripts/$(basename "$0").log"

exit[/code:3tua2eoj]

파일명에 개행문자가 포함되어 있으면 해당 파일은 적용되지 않습니다.
개행문자를 처리하는 방법을 알려주시면 추가/수정후 다시 올리겠습니다.

저는 nautilus script에 넣고 사용합니다.

적용하려면, 빈파일을 만드시고 위 코드를 붙여넣은뒤 저장하시고 난뒤 파일을 우클릭->속성->권한에서 '실행: 이 파일을 실행파일로 허용'에 체크해주시면 됩니다. 그 뒤, 터미널을 열고, 해당 스크립트의 주소를 쓰신뒤 엔터를 누르시면 해당 위치에서 적용됩니다.
nautilus script에 적용하시려면, '마우스 우클릭->스크립트->스크립트 폴더 열기'하셔서 스크립트 폴더에 넣어주시면 됩니다. 이 방법을 사용하면 터미널을 열 필요없이 마우스 동작만으로도 쉽고 간단하게 적용됩니다.

별님
Posts: 577
Joined: 2012/01/11 Wed 9:38 pm
Contact:

Re: 윈도우에서 사용 불가능한 문자를 대체하는 스크립트

Post by 별님 » 2013/03/21 Thu 2:41 am

현재 폴더에서만 윈도우에서 사용 불가능한 문자를 대체
[code:yvpwt263]#!/bin/bash
#윈도우에서 사용 불가능한 문자를 대체문자로 바꾼다. 단, '/' 문자는 제외된다.
#숨겨진 파일(name : .*)은 대상에서 제외된다.

{
echo '=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+'
date

IFS='
'

#파일 이름을 고침
echo -e "\n파일 이름을 고칩니다."; echo "작업위치 : `pwd`";
for a in `ls`
do
f=$(echo "$a" | sed -e 's/\?/?/g' -e 's/\:/:/g' -e 's/\*/*/g' -e 's/\"/"/g' -e 's/</〈/g' -e 's/>/〉/g' -e 's/[|]/│/g' -e 's/[\\]/\/g') #이름 중 특정 문자를 치환
if [ "$a" != "$f" -a -e "$f" ] #수정될 이름을 가진 대상이 존재하는지 확인
then
erro=$(echo "$erro"; echo "$a") #에러 목록을 작성
elif [ "$a" != "$f" -a ! -e "$f" ]
then
mv -Tv "$a" "$f" #이름을 수정
fi
done

#작업 결과를 알림
if [ "$erro" ]
then
for i in $erro
do
erro_list=`echo -n "${erro_list} \"$i\""`
done
bash <<EOF
zenity --list \
--title "알림" \
--text "수정될 이름을 가진 대상이 존재합니다!" \
--height 400 \
--column '이름' $erro_list
EOF
fi

echo ''
} 2>&1 | tee -a ~/"Log_nautilus-scripts/$(basename "$0").log"

exit[/code:yvpwt263]

하위 모든 영역에서 윈도우에서 사용 불가능한 문자를 대체
[code:yvpwt263]#!/bin/bash
#윈도우에서 사용 불가능한 문자를 대체문자로 바꾼다. 단, '/' 문자는 제외된다.
#숨겨진 영역(path : */.*)과 숨겨진 파일(name : .*)은 대상에서 제외된다.

{
echo '=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+'
date

IFS='
'

#작업 대상이 될 위치들을 추출
temp=`find . ! \( -path '*/.*' -prune \) -type d`

#현재위치를 기억
home=`pwd`

#역순으로 정렬
last=`echo "$temp" | fgrep -c ''`
countt=$last
for i in `seq $last`
do
temp2=`echo "$temp2"; echo "$temp" | sed -n "${countt}p"`
countt=`expr $countt - 1`
done

#파일 이름을 고침
echo -e "\n파일 이름을 고칩니다."; echo "작업위치 : $home";
for i in $temp2
do
cd "$i" #작업 위치로 이동
echo ''; echo "$i에서"
for a in `ls`
do
f=$(echo "$a" | sed -e 's/\?/?/g' -e 's/\:/:/g' -e 's/\*/*/g' -e 's/\"/"/g' -e 's/</〈/g' -e 's/>/〉/g' -e 's/[|]/│/g' -e 's/[\\]/\/g') #이름 중 특정 문자를 치환
if [ "$a" != "$f" -a -e "$f" ] #수정될 이름을 가진 대상이 존재하는지 확인
then
erro=$(echo "$erro"; echo "$i/$a") #에러 목록을 작성
elif [ "$a" != "$f" -a ! -e "$f" ]
then
mv -Tv "$a" "$f" #이름을 수정
fi
done
cd "$home" #초기 위치로 복귀
done

#작업 결과를 알림
if [ "$erro" ]
then
for i in $erro
do
path=$(dirname "$i")
name=$(basename "$i")
erro_list=`echo -n "${erro_list} \"$name\" \"$path\""`
done
bash <<EOF
zenity --list \
--title "알림" \
--text "수정될 이름을 가진 대상이 존재합니다!" \
--height 400 \
--column '이름' \
--column '위치' $erro_list
EOF
else
zenity --info --title '알림' --text '작업이 완료되었습니다.'
fi

echo ''
} 2>&1 | tee -a ~/"Log_nautilus-scripts/$(basename "$0").log"

exit[/code:yvpwt263]

바뀔 이름의 화일이 존재할때, 작업대상이 사라지던 문제를 해결
로그를 알기 쉽도록 작성되도록 수정.
기타 등등

bash에 적합하도록 만들어졌으나, sh로 수정해도 될겁니다.

Post Reply