파일 나누기(Split)와 합치기(Join)의 스크립트입니다.
아래 내용을 스크립트 파일로 만듭니다.

추신: 업데이트 (update - 2009/11/23)
  1. 네트워크 폴더 지원
  2. 한글및 특수문자 지원

(** 메세지에 한글 때문에 UTF-8 로 저장해야 합니다. 영문일 경우엔 상관없습니다. **)

$ gedit "~/.gnome2/nautilus-scripts/Split"
#!/bin/sh
# Nautilus script - split/join
# phiDel (http://blog.foxb.kr/)

case $LANG in
#    en* )
#    ;;
    * )
        NOTSELECTED="선택한 파일이 없습니다."
        ZENITYTEXT="나누어질 크기를 선택하세요."
        ZENITYCOLUMN0="선택"
        ZENITYCOLUMN1="크기"
        ZENITYCUSTOM="사용자 지정..."
        ZENITYINPUTTEXT="파일을 나눌 크기를 적어주세요.\n예제: 1024k - (단위: b, k, m, g)"
        QUESTIONTEXT="나눠질 파일과 같은 파일이 있습니다.\n삭제하고 계속 하시겠습니까?"
        PROGTEXT="파일을 나누는 중 입니다."
    ;;
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

FILENAME=$(basename "$NAUTILUS_SCRIPT_SELECTED_URIS")
FILENAME=`urldecode "$FILENAME"`
CURRENTDIR=$PWD

RESULT=$(zenity --list --title "$FILENAME" --text="$ZENITYTEXT" --column="$ZENITYCOLUMN0" --column="$ZENITYCOLUMN1" FALSE 500k TRUE 1m FALSE 5m FALSE 10m FALSE 50m FALSE 100m FALSE "$ZENITYCUSTOM" --radiolist --width 250 --height 275)

if [ $? = 0 ] ; then
    if [ "$RESULT" = "$ZENITYCUSTOM" ] ; then
        RESULT=$(zenity --title "$ZENITYCUSTOM" --text "$ZENITYINPUTTEXT" --entry)
        if [ $? = 1 ] ; then
            exit
        fi
    fi

    if [ $(stat -c%s "$FILENAME".split.* | awk '{size +=$1} END {print size}') -gt 0 ] ; then
        zenity --question --title "Question" --text "$QUESTIONTEXT"
        if [ $? = 1 ] ; then
            exit
        fi
        rm "$FILENAME".split.*
    fi

    TOTALFILESIZE=`stat -c%s "$FILENAME"`
    A=0

    split -b $RESULT "$FILENAME" "$FILENAME".split. |
    (while [ $A -lt $TOTALFILESIZE ]
    do
    sleep 0.3
    A=`stat -c%s "$FILENAME".split.* | awk '{size +=$1} END {print size}'`
    echo  $(expr $A \* 100 / $TOTALFILESIZE )
    done) | zenity --auto-close --auto-kill --progress --text="$PROGTEXT"
fi
$ chmod 755 "~/.gnome2/nautilus-scripts/Split"

$ gedit "~/.gnome2/nautilus-scripts/Join"
#!/bin/sh
# Nautilus script - split/join
# phiDel (http://blog.foxb.kr/)

case $LANG in
#    en* )
#    ;;
    * )
        NOTSELECTED="선택한 파일이 없습니다."
        NOTSPLITFILE="선택한 파일이 나누어진 파일이 아닙니다."
        QUESTIONTEXT="합쳐질 파일과 같은 파일이 있습니다.\n삭제하고 계속 하시겠습니까?"
        PROGTEXT="파일을 합치는 중 입니다."
    ;;
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

FILENAME=$(basename "$NAUTILUS_SCRIPT_SELECTED_URIS")
FILENAME=`urldecode "$FILENAME"`
CURRENTDIR=$PWD

FILENAME=${FILENAME%.*}
FILEEXT=${FILENAME##*.}

if [ ! "$FILEEXT" = "split" ] ; then
    zenity --error --title "Error" --text "$NOTSPLITFILE"
    exit
fi

JOINFILENAME=${FILENAME%.*}

if [ -f "$JOINFILENAME" ] ; then
    zenity --question --title "Question" --text "$QUESTIONTEXT"
    if [ $? = 1 ] ; then
        exit
    fi
    rm "$JOINFILENAME"
fi

TOTALFILESIZE=`stat -c%s "$JOINFILENAME".split.* | awk '{size +=$1} END {print size}'`
A=0

cat /dev/null > "$JOINFILENAME"
 
cat "$JOINFILENAME.split".* > "$JOINFILENAME" |
(while [ $A -lt $TOTALFILESIZE ]
do
sleep 0.3
A=$(stat -c%s "$JOINFILENAME")
echo  $(expr $A \* 100 / $TOTALFILESIZE )
done) | zenity --auto-close --auto-kill --progress --text="$PROGTEXT"
$ chmod 755 "~/.gnome2/nautilus-scripts/Join"


저작자 표시 비영리 동일 조건 변경 허락
Posted by 파이델