Nautilus에서 CD 이미지 (.BIN, .MDF, .IMG, .BWI, .NRG) 쉽게 Mount 하기

우선 FUSE module to mount ISO filesystem images 라는 프로그램을 설치합니다.
$ sudo apt-get install fuseiso

이 프로그램은 CD 이미지 (.ISO, .BIN, .MDF, .IMG, .BWI, .NRG) 를 마운트 할수있게 도와주는 콘솔 프로그램입니다.
그리고 이걸 도와주는 GUI 프로그램도 있는데 ([url=http://blog.foxb.kr/127:31bu9p30]Furius ISO Mount[/url:31bu9p30]) 노틸러스에서 바로 사용할수 없어서 전 이방법을 씁니다.

설치가 끝나면 아래 파일을 "~/.gnome2/nautilus-scripts" 폴더에 만들어 넣어주세요. (폴더가 없으면 만들어 주세요.)

$ gedit "~/.gnome2/nautilus-scripts/Mount CD Image"

[code:31bu9p30]#!/bin/sh

if [ ! "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ] ; then
exit
fi

MOUNTDIR="$HOME/CD_Image"

if [ ! -d "$MOUNTDIR" ] ; then
mkdir "$MOUNTDIR"
fi

TRIMSTR=$(echo -n "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sed ‘s/^ (.)/\1/’ | sed ‘s/ *$//’)

fuseiso "$TRIMSTR" "$MOUNTDIR"[/code:31bu9p30]
$ chmod 755 "~/.gnome2/nautilus-scripts/Mount CD Image"

$ gedit "~/.gnome2/nautilus-scripts/Unmount CD Image"

[code:31bu9p30]#!/bin/sh

MOUNTDIR="$HOME/CD_Image"

if [ -d "$MOUNTDIR" ] ; then
fusermount -u "$MOUNTDIR"
rmdir "$MOUNTDIR"
fi[/code:31bu9p30]
$ chmod 755 "~/.gnome2/nautilus-scripts/Unmount CD Image"

MOUNTDIR 변수를 자~알 수정하면 파일별로 마운트도 가능합니다. (전 언마운트 할때 일일이 체크하기 귀찮아서 하나로 통일)

[color=#FF0000:31bu9p30][b:31bu9p30]추신:[/b:31bu9p30][/color:31bu9p30] 조금 더 세련되게? 수정한 스크립트 ^^ - (사용전에 실행권한 주는거 잊지마세요.)
[attachment=0:31bu9p30]nautilus-scripts-fuseiso-(2010.03.31).tar.gz[/attachment:31bu9p30]
[attachment=1:31bu9p30]nautilus-scripts-fuseiso.2009.12.10.tar.gz[/attachment:31bu9p30]
[attachment=2:31bu9p30]nautilus-scripts-fuseiso.tar.gz[/attachment:31bu9p30]

좋은 팁 감사드립니다.

저…저게 다… 그냥 마운트가 된다는 거죠??? +_+

추신: 조금 더 세련되게? 수정한 스크립트 ^^ - (사용전에 실행권한 주는거 잊지마세요.)
Attachment:
파일 설명: update: 2010/03/31

  1. 마운트 해제 특정 폴더안에서 안되던거 수정
    .
    [url=http://www.ubuntu.or.kr/download/file.php?id=7225:2ft7s401]nautilus-scripts-fuseiso-(2010.03.31).tar.gz[/url:2ft7s401] [1.15 KiB]

Attachment:
파일 설명: update: 2009/12/10

  1. 여러개의 cd이미지 지원
    .
    nautilus-scripts-fuseiso.2009.12.10.tar.gz [1.12 KiB]

Attachment:
파일 설명: update: 2009/11/23

  1. 네트워크 폴더 지원
  2. 한글및 특수문자가 포함된 폴더 지원
    .
    nautilus-scripts-fuseiso.tar.gz [964 Bytes]

이미지를 여러개 마운트 하는 스크립트로 수정해 보았습니다.

[b:39ifplx0]이미지 마운트 스크립트[/b:39ifplx0]

[code:39ifplx0]
#!/bin/bash

Nautilus script - fuseiso

phiDel (http://blog.foxb.kr/)

Patch by Anna Lee (2009.11.23)

BASENAMECOMMAND="/usr/bin/basename"
MOUNTDIR="$HOME/$BASENAMECOMMAND $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS .iso"
FUSERMOUNT="/bin/fusermount"
FUSEISO="/usr/bin/fuseiso"
ZENITY="/usr/bin/zenity"
ECHO="/bin/echo"
SED="/bin/sed"
MKDIR="/bin/mkdir"
RMDIR="/bin/rmdir"

case $LANG in
en* )

	NOTSELECTED="CD-image not selected" 
	QUESTIONTEXT="CD-image is already mounted.\nWould you like the new mount?"
;;
* ) 
	
	NOTSELECTED="선택한 CD-이미지가 없습니다."
	QUESTIONTEXT="이미 마운트된 CD-이미지가 있습니다.\n새로 마운트 하시겠습니까?"
;;

esac

urldecode(){
x=$ECHO "$@" | $SED 'y/+/ /; s/%/\\\\x/g; s/\//\\\\\//g'
$ECHO "$x" | $SED ‘s/^.*$/’"$x"‘/’
}

if [ ! $NAUTILUS_SCRIPT_SELECTED_URIS ] ; then
$ZENITY --error --title "Error" --text "$NOTSELECTED"
exit
fi

if [ ! -d "$MOUNTDIR" ] ; then
$MKDIR "$MOUNTDIR"
else
$ZENITY --question --title "Question" --text "$QUESTIONTEXT"
if [ $? = 1 ] ; then
exit
fi
$FUSERMOUNT -u "$MOUNTDIR"
fi

FILENAME=$($BASENAMECOMMAND "$NAUTILUS_SCRIPT_SELECTED_URIS")
FILENAME=urldecode "$FILENAME"
CURRENTDIR=$PWD

RESULT=cd ~ && $FUSEISO "$CURRENTDIR/$FILENAME" "$MOUNTDIR" 2>&1

if [ -n "$RESULT" ] ; then
$ZENITY --error --title "Error" --text "$RESULT"
$RMDIR "$MOUNTDIR"
exit
fi

echo $MOUNTDIR >> /tmp/.imagemount
[/code:39ifplx0]

[b:39ifplx0]이미지 언마운트 스크립트[/b:39ifplx0]

[code:39ifplx0]
#!/bin/sh

Nautilus script - fuseiso

phiDel (http://blog.foxb.kr/)

Patch by Anna Lee (2009.11.23)

IMAGE_LIST="/tmp/.imagemount"
IMAGE_TMP="/tmp/.imagemount_tmp"
ZENITY="/usr/bin/zenity"
CAT="/bin/cat"
ECHO="/bin/echo"
AWK="/usr/bin/awk"
RMDIR="/bin/rmdir"
MOVE="/bin/mv"
REMOVE="/bin/rm"

case $LANG in
en* )
FILENOTFOUND="don’t mount Image or \n Can’t open $IMAGE_LIST."
QUESTIONTEXT="do you wont unmount?"
;;
* )
FILENOTFOUND="마운트된 이미지가 없거나 \n $IMAGE_LIST 파일을 열수 없습니다."
QUESTIONTEXT="를 언마운트 하시겠습니까?"
;;
esac

if [ ! -f "$IMAGE_LIST" ] ; then
$ZENITY --error --title "Error" --text "$FILENOTFOUND"
exit 1
fi

IMAGE_LIST_LOAD=$CAT $IMAGE_LIST;

for IMAGE in $IMAGE_LIST_LOAD ; do

IMAGE_NAME=`$ECHO $IMAGE | $AWK -F"/" '{print $4}'`
$ZENITY --question --title "Question" --text "$IMAGE_NAME $QUESTIONTEXT"

if [ $? = 0 ] ; then

	if [ -d "$IMAGE" ] ; then
		RESULT=`fusermount -u "$IMAGE" 2>&1`

		if [ -n "$RESULT" ] ; then
			$ZENITY --error --title "Error" --text "$RESULT"
			$CAT /dev/null > $IMAGE_TMP
			$ECHO $IMAGE >> $IMAGE_TMP
		else
			$RMDIR $IMAGE
		fi
	fi
else
	$CAT /dev/null > $IMAGE_TMP
	$ECHO $IMAGE >> $IMAGE_TMP
fi

done

if [ -f $IMAGE_TMP ] ; then
$MOVE $IMAGE_TMP $IMAGE_LIST
else
$REMOVE $IMAGE_LIST
fi
[/code:39ifplx0]

[quote="annalee":3j17o5lj]이미지를 여러개 마운트 하는 스크립트로 수정해 보았습니다.[/quote:3j17o5lj]

좋은 작업 감사합니다. 코드가 세련되 보여요 ^^

제껀 시디룸처럼 폴더 경로가 변하지 말아야 할때 쓰면 좋고
[b:3j17o5lj]annalee[/b:3j17o5lj]님껀 이미지를 여러개 마운트하여 많은 작업을 한번에 할때 쓰면 많은 도움이 되겠어요.

그런대 한가지 문제가
[color=#FF0000:3j17o5lj]$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS[/color:3j17o5lj] .iso`"
이 변수가 로컬 전용이라 네트워크 공유폴더 같은데선 아무것도 넘어오질 않아요.

$NAUTILUS_SCRIPT_SELECTED_URIS 이걸 사용하시면 됩니다.
단 이건 주소가 encode 되어 넘어오므로 urldecode 꼭 해주셔야 하고요^^

저도 이번에 새로 만든 스크립트에서 _URIS 변수로 바꾼 이유가 그거에요.

[quote="is4975":3kmg6fjf][quote="annalee":3kmg6fjf]이미지를 여러개 마운트 하는 스크립트로 수정해 보았습니다.[/quote:3kmg6fjf]

좋은 작업 감사합니다. 코드가 세련되 보여요 ^^

제껀 시디룸처럼 폴더 경로가 변하지 말아야 할때 쓰면 좋고
[b:3kmg6fjf]annalee[/b:3kmg6fjf]님껀 이미지를 여러개 마운트하여 많은 작업을 한번에 할때 쓰면 많은 도움이 되겠어요.

그런대 한가지 문제가
[color=#FF0000:3kmg6fjf]$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS[/color:3kmg6fjf] .iso`"
이 변수가 로컬 전용이라 네트워크 공유폴더 같은데선 아무것도 넘어오질 않아요.

$NAUTILUS_SCRIPT_SELECTED_URIS 이걸 사용하시면 됩니다.
단 이건 주소가 encode 되어 넘어오므로 urldecode 꼭 해주셔야 하고요^^

저도 이번에 새로 만든 스크립트에서 _URIS 변수로 바꾼 이유가 그거에요.[/quote:3kmg6fjf]

아 그렇군요 ^^;
is4975 님 덕분에 좋은 스크립트 얻어 갑니다.

is4975 님 말씀대로 스크립트를 좀더 수정해 보았습니다.

이미지 마운트

[code:txs0vvgc]
#!/bin/bash

Nautilus script - fuseiso

phiDel (http://blog.foxb.kr/)

Patch by Anna Lee (2009.11.24)

BASENAMECOMMAND="/usr/bin/basename"
FUSERMOUNT="/bin/fusermount"
FUSEISO="/usr/bin/fuseiso"
ZENITY="/usr/bin/zenity"
ECHO="/bin/echo"
SED="/bin/sed"
AWK="/usr/bin/awk"
MKDIR="/bin/mkdir"
RMDIR="/bin/rmdir"
CURRENTDIR=$PWD

변환 할수 있는 확장자명을 선언

IMAGE_ATTRIBUTE="iso bin mdf img bwi nrg"

case $LANG in
en* )

	NOTSELECTED="CD-image not selected" 
	QUESTIONTEXT="CD-image is already mounted.\nWould you like the new mount?"
	NOTIMAGE="Not a CD-Image File."
;;
* ) 
	
	NOTSELECTED="선택한 CD-이미지가 없습니다."
	QUESTIONTEXT="이미 마운트된 CD-이미지가 있습니다.\n새로 마운트 하시겠습니까?"
	NOTIMAGE="이미지 파일이 아닙니다."
;;

esac

아무것도 선택 되지 않았을 경우 에러 호출

if [ ! $NAUTILUS_SCRIPT_SELECTED_URIS ] ; then
$ZENITY --error --title "Error" --text "$NOTSELECTED"
exit
fi

#유니코드 변환 함수 선언
urldecode(){
x=$ECHO "$@" | $SED 'y/+/ /; s/%/\\\\x/g; s/\//\\\\\//g'
$ECHO "$x" | $SED ‘s/^.*$/’"$x"‘/’
}

FILENAME=$BASENAMECOMMAND $NAUTILUS_SCRIPT_SELECTED_URIS

CD 이미지인지 확인하기 위해 확장자만 분리

FILE_ATTRIBUTE=$ECHO $FILENAME | $AWK -F"." '{print $2}'

대문자를 소문자로 변환

FILE_ATTRIBUTE=$ECHO $FILE_ATTRIBUTE | tr '[:upper:]' '[:lower:]'

파일명으로 생성할 디렉토리

MOUNTDIR="$HOME/urldecode $FILENAME | $AWK -F"." '{print $1}'"

마운트 할 파일명

FILENAME=urldecode "$FILENAME"

IS_IMAGE_FLAG="N"
#확장자를 선언한 변수를 가져와 루프
for ATTRIBUTE in $IMAGE_ATTRIBUTE ; do
if [ $FILE_ATTRIBUTE = $ATTRIBUTE ] ; then

	if [ ! -d "$MOUNTDIR" ] ; then
		$MKDIR "$MOUNTDIR"
	else
		# 마운트할 디렉토리가 존재 한다면 다시 시도 할지 종료할지 질문
		$ZENITY --question --title "Question" --text "$QUESTIONTEXT"
		if [ $? = 1 ] ; then
			exit
		fi
		# 기존 디렉토리 언마운트
		$FUSERMOUNT -u "$MOUNTDIR"
	fi

	# 홈디렉토리로 이동후 생성한 디렉토리에 이미지 마운트
	RESULT=`cd ~ && $FUSEISO "$CURRENTDIR/$FILENAME" "$MOUNTDIR" 2>&1`

		# 오류가 발생 했다면
		if [ -n "$RESULT" ] ; then
			$ZENITY --error --title "Error" --text "$RESULT"
			$RMDIR "$MOUNTDIR"
			exit
		fi
	# 정상적으로 마운트가 되면 마운트경로 기록
	$ECHO $MOUNTDIR >> /tmp/.imagemount
	IS_IMAGE_FLAG="Y"
fi

done

이미지 파일이 아니라면 에러 호출

if [ $IS_IMAGE_FLAG = "N" ] ; then
$ZENITY --error --title "Error" --text "$NOTIMAGE"
fi
[/code:txs0vvgc]

이미지 언마운트

[code:txs0vvgc]
#!/bin/sh

Nautilus script - fuseiso

phiDel (http://blog.foxb.kr/)

Patch by Anna Lee (2009.11.24)

IMAGE_LIST="/tmp/.imagemount"
IMAGE_TMP="/tmp/.imagemount_tmp"
ZENITY="/usr/bin/zenity"
CAT="/bin/cat"
ECHO="/bin/echo"
AWK="/usr/bin/awk"
SED="/bin/sed"
RMDIR="/bin/rmdir"
MOVE="/bin/mv"
REMOVE="/bin/rm"
FUSERMOUNT="/bin/fusermount"

case $LANG in
en* )
FILENOTFOUND="don’t mount Image or \n Can’t open $IMAGE_LIST."
QUESTIONTEXT=" unmount do you want?"
;;
* )
FILENOTFOUND="마운트된 이미지가 없거나 \n $IMAGE_LIST 파일을 열수 없습니다."
QUESTIONTEXT="를 언마운트 하시겠습니까?"
;;
esac

마운트경로 기록 파일이 없을 경우

if [ ! -f "$IMAGE_LIST" ] ; then
$ZENITY --error --title "Error" --text "$FILENOTFOUND"
exit 1
fi

마운트경로 기록파일을 한줄씩 처리

$CAT $IMAGE_LIST | while read IMAGE_LIST_LOAD
do

# 마운트경로에서 파일 이름만 추출
IMAGE_NAME=`$ECHO $IMAGE_LIST_LOAD | $AWK -F"/" '{print $4}'`
# 언마운트 할지 질문
$ZENITY --question --title "Question" --text "$IMAGE_NAME$QUESTIONTEXT"

if [ $? = 0 ] ; then

	if [ -d "$IMAGE_LIST_LOAD" ] ; then

		RESULT=`$FUSERMOUNT -u "$IMAGE_LIST_LOAD" 2>&1`

		# 에러 호출
		if [ -n "$RESULT" ] ; then
			$ZENITY --error --title "Error" --text "$RESULT"
			$ECHO $IMAGE_LIST_LOAD >> $IMAGE_TMP
		else
			$RMDIR "$IMAGE_LIST_LOAD"
		fi
	fi
else
	$ECHO $IMAGE_LIST_LOAD >> $IMAGE_TMP
fi

done

if [ -f $IMAGE_TMP ] ; then
$MOVE $IMAGE_TMP $IMAGE_LIST
else
$REMOVE $IMAGE_LIST
fi
[/code:txs0vvgc]