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

윈도우에서 사용 불가능한 문자를 대체.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/&#58;/:/g’ -e ‘s/*/*/g’ -e ‘s/&quot;/"/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에 적용하시려면, '마우스 우클릭->스크립트->스크립트 폴더 열기’하셔서 스크립트 폴더에 넣어주시면 됩니다. 이 방법을 사용하면 터미널을 열 필요없이 마우스 동작만으로도 쉽고 간단하게 적용됩니다.

현재 폴더에서만 윈도우에서 사용 불가능한 문자를 대체

[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/&#58;/:/g’ -e ‘s/*/*/g’ -e ‘s/&quot;/"/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 &quot;${erro_list} \&quot;$i\&quot;&quot;
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 &#46; ! \( -path '*/&#46;*' -prune \) -type d

#현재위치를 기억
home=pwd

#역순으로 정렬
last=echo &quot;$temp&quot; | fgrep -c ''
countt=$last
for i in seq $last
do
temp2=echo &quot;$temp2&quot;; echo &quot;$temp&quot; | sed -n &quot;${countt}p&quot;
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/&#58;/:/g’ -e ‘s/*/*/g’ -e ‘s/&quot;/"/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 &quot;${erro_list} \&quot;$name\&quot; \&quot;$path\&quot;&quot;
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로 수정해도 될겁니다.