스크린 샷을 찍고 날짜 디렉토리에 일련 번호로 저장하는 스크립트

스크린샷을 찍을 기회는 좀처럼 많다고 생각합니다만, 여러분은 어떻게 되어 있을까요. 리눅스에서는 셔터 이라는 응용 프로그램이 스크린 샷을 찍는 데 사용하기 쉽다고 생각합니다. 나누고 싶기 때문에 조금 불편했습니다. 그래서, 이번 쉘 스크립트로 간단하게 써 보았습니다. 필요한 패키지는 imagemagick입니다.

아래 스크립트
sh ~/bin/screenshot.sh

와 같이 옵션 없이 실행하면(자), rootdir 에 지정한 디렉토리(아래의 예의 경우 $HOME/Workspace/blog )안에, 오늘의 날짜의 디렉토리가 없는 경우에는 오늘의 날짜를 이름으로 한 디렉토리를 작성 그런 다음 "screen_001.jpg"와 같이 이름을 지정하여 전체 화면의 스크린 샷을 저장합니다. 디렉토리 안에 같은 형식으로 이름이 붙여진 파일이 있을 때에는 그 숫자를 읽고 가장 큰 숫자보다 더 큰 숫자를 붙여 저장합니다.

실제로 사용해 가면 디렉토리 구조는 이런 느낌이 됩니다.



저장이 끝나면 notify-send로 저장했음을 알립니다. Mac에서는 다른 알림 스크립트가 있다고 생각하기 때문에, 적당히 그쪽을 사용하면 좋을까 생각합니다.



오른쪽 상단에 알림이 표시됩니다.

또, 기본적으로 키보드 단축키로서 사용하는 것을 생각하고 있으므로, 커멘드 라인으로부터 사용하는 장면은 그다지 생각하고 있지 않습니다만, 일단 옵션을 줄 수도 있습니다. "d"로 (날짜 디렉토리 대신) 저장할 디렉토리를 절대 경로로 지정할 수 있습니다. "o"로 저장할 이미지 파일의 이름을 지정할 수 있습니다.

덧붙여서 나의 경우는 키보드의 PrintScreen을 눌렀을 때는 화면 전체, Shift를 누르면서 PrintScreen를 눌렀을 때에는 범위 지정으로 스크린 샷을 찍도록 하고 있습니다.

screenshot.sh
#!/bin/sh
#

get_dir=false
get_name=false
rootdir=$HOME/Workspace/blog

if [ $# -le 0 ]; then
    while getopts d:o: OPT
    do
      case $OPT in
        "d" ) get_dir=true
              dir="$OPTARG" ;;
        "o" ) get_name=true
              name="$OPTARG" ;;
          * ) exit 1 ;;
      esac
    done
fi

# スクリーンショットを保存するディレクトリを設定
if ! $get_dir; then
    if [ ! -e $rootdir ]; then
        echo "There is no directory named: $rootdir"
        exit 1
    fi
    daydir=`date +%Y-%m-%d`
    dir=$rootdir/$daydir
fi

# ファイル名を設定
if ! $get_name; then
    if [ ! -e $dir ]; then
        mkdir $dir
        i=1
    else
        i=`expr $(ls $dir | sed -n 's/screen_\([0-9]\{3\}\).jpg/\1/p' | tail -n 1) + 1`
    fi
    name=$(printf screen_%03d.jpg $i)
fi

import -window root -quality 0 $dir/$name
# 範囲選択 (別ファイルに分けてもよい)
# import -quality 0 $dir/$name

notify-send "Screenshot has been made" "saved: $dir/$name"

exit 0

이미지의 가공이나, 제대로 이름을 붙인다면, 나중에 수동으로 하지 않으면 안 되지만, 우선 아무것도 생각하지 않고 스쿠쇼를 찍을 수 있는 것은 편합니다.

좋은 웹페이지 즐겨찾기