本日の課題:シェルスクリプトの作成
本日の実習の内容+αを用いて,大量のファイルの仕分けを行い,動画を作成するシェルスクリプトを作成しましょう.本日の授業では,テキストエディタに vi を使用しましたが,本課題を作成するうえで,使用するテキストエディタの指定はありません.vim,emacs,nano など,好みのエディタを使用してください.
課題背景
INEX の TA である T 君は, INEX の授業の課題を作成するために,2023/01/01 から 2023/12/31 に静止衛星ひまわりによって撮影された赤外画像ファイル (以下,衛星画像ファイル) を情報実験機を用いて取得しました.作業が一段落ついたので,T 君は休憩を取ることにしましたが,ログアウトせずに離席してしまいました.INEX の TF である M さんは,自分の研究を行うために電脳大飯店を訪れたところ,T 君のアカウントでログインされたままの情報実験機を発見しました.そこで,TF の M さんは T 君が取得した衛星画像の中に,ダミーの画像を追加し,さらに画像のファイル名を IMG_XXXX.jpg (XXXX は通し番号) に変更するといういたずらをしました.このままでは,T 君はどのファイルが何月の衛星画像であるかが分からないうえ,課題作成時にダミー画像が紛れ込んでしまいます.そこで,衛星画像の名前を撮影日時に,ダミーの画像をダミーと分かるようにファイル名を変更し,ダミーの画像と衛星画像を分別,さらに衛星画像は月ごとに分けるシェルスクリプトを作成することで,T 君を助けてあげましょう.
課題データの説明
課題で利用する画像ファイル,テキストファイルは kadai.tar.gz として,各情報実験機の /kadai に置いてあります. tar アーカイブ内には,画像ファイル・テキストファイルがそれぞれ 8742 枚ずつ入っています.画像ファイルは静止衛星ひまわりが撮影した衛星画像ファイル,または,ダミー画像ファイルで,ファイル名は IMG_XXXX.jpg (XXXX は通し番号:0001-8742) です.テキストファイルには画像ファイルの情報が書かれており,ファイル名は IMG_XXXX.txt (XXXX は通し番号:0001-8742) です.テキストファイルの名前にある数字と同じ数字がついた画像ファイルは対応しており,対応する画像ファイルが衛星画像ファイルの場合は撮影日時 "YYYYMMDDhh",ダミー画像ファイルの場合は "dummy_ZZ" (ZZ は通し番号) という文字列が書かれています.ここで,撮影日時の "YYYY" は西暦年 (2023年=>2023),"MM" は月 (1月-12月=>01-12),"DD" は日 (1日-31日=>01-31),"hh" は時 (0時-23時=>00-23) を表しています.衛星画像例とダミー画像例は下記のとおりです.
テキストファイル[IMG_0001.txt]
テキストファイル[IMG_0007.txt]
課題
シェルスクリプトを情報実験機の各自のホームディレクトリで実行した際に,以下の 9 個の要件を満たすようなシェルスクリプト "kadai.sh" を作成してください.以下,"" に囲まれているディレクトリは Fig. 1 に示されているディレクトリと同じものとします.シェルスクリプトの実行によって生成されるディレクトリ・ファイルの配置は下図のとおりです.

- "work" ディレクトリを作成する.すでに "work" ディレクトリが存在する場合は,もともとあった "work" ディレクトリを削除し,新たな "work" ディレクトリを作成する.
- "work" 直下に,月ごとの衛星画像ファイルとテキストファイルを格納する 12 個のディレクトリ "01","02",...,"11","12"(以下 "MM" とする) とダミー画像を格納するディレクトリ "dummy",作成した動画を格納するディレクトリ "gif",tar アーカイブをダウンロード・解凍するためのディレクトリ "src" を作成する.
- 月ごとの衛星画像を格納する 12 個のディレクトリ "MM" の直下に衛星画像ファイルを格納するディレクトリ "img",テキストファイルを格納するディレクトリ "txt" を作成する.
- ダミー画像を格納するディレクトリ "dummy" の直下にダミー画像ファイルを格納するディレクトリ "img",テキストファイルを格納するディレクトリ "txt" を作成する.
- kadai.tar.gz を /kadai から "src" にコピーし,"src" 内で解凍する.データの圧縮・解凍 にも記述しているが,tar コマンドを実行しファイルを解凍した場合,カレントディレクトリで解凍される.また,kadai.tar.gz は /src に残しておくこと.
- ファイルのコピー・リネーム・仕分け(IMG_XXXX.jpg が衛星画像ファイルの場合)
IMG_XXXX.txt には撮影日時 (YYYYMMDDhh) が記載されている.IMG_XXXX.jpg は月ごとの衛星画像を格納するディレクトリ "MM" 直下の "img" にコピーする.この時,ファイル名は YYYYMMDDhh.jpg として "img" に格納する.この時,"src" には IMG_XXXX.jpg を残したままにしておく.IMG_XXXX.txt は月ごとの衛星画像を格納するディレクトリ "MM" 直下の "txt" にコピーする.ファイル名は YYYYMMDDhh.txt として "txt" に格納する.この時,"src" には IMG_XXXX.txt を残したままにする. - ファイルのコピー・リネーム・仕分け(IMG_XXXX.jpg がダミー画像ファイルの場合)
IMG_XXXX.txt には dummy_ZZ (ZZ は通し番号) と記載されている.IMG_XXXX.jpg はダミー画像を格納するディレクトリ "dummy" 直下の "img" にコピーする.この時,ファイル名は dummy_ZZ.jpg として "img" に格納する.この時,"src" には IMG_XXXX.jpg を残したままにしておく.IMG_XXXX.txt は月ごとのダミー画像を格納するディレクトリ "dummy" 直下の "txt" にコピーする.ファイル名は dummy_ZZ.txt として "txt" に格納する.この時,"src" には IMG_XXXX.txt を残したままにする. - 好きな月を 1 つ以上選び,衛星画像ファイルを連結した動画を作成する.動画を作成するには,ディレクトリ "gif" に移動し,下記コマンドを実行すると,ディレクトリ "gif" に kadai_MM.gif が生成される.
ここで,MM は 月(01,02,03...,11,12:1月-12月) を表す.$ convert -delay 20 ../"MM"/img/*.jpg kadai_MM.gif
1 つの動画の作成には 2 分程度かかる.もし,全ての月の動画を作成しようと考えている場合,動画の作成に 20 分程度かかるので注意すること. - 各月の衛星画像ファイルの枚数を数え,file.csv に出力する.file.csv の書式は以下のとおりとし,"work" 直下に生成する.
1 列目に MM (01,02,03,...,11,12:1月-12月),2 列目に各月の衛星画像ファイルの枚数を出力すること.例えば,1 月の衛星画像ファイルが 200 枚の時,file.csv の 1 行目 は01, 1 月の衛星画像ファイルの枚数
02, 2 月の衛星画像ファイルの枚数
03, 3 月の衛星画像ファイルの枚数
04, 4 月の衛星画像ファイルの枚数
05, 5 月の衛星画像ファイルの枚数
06, 6 月の衛星画像ファイルの枚数
07, 7 月の衛星画像ファイルの枚数
08, 8 月の衛星画像ファイルの枚数
09, 9 月の衛星画像ファイルの枚数
10,10 月の衛星画像ファイルの枚数
11,11 月の衛星画像ファイルの枚数
12,12 月の衛星画像ファイルの枚数
となる.また,1 列目と 2 列目はカンマで区切る.01, 200
提出内容
以下のものを提出せよ.〆切: 2024年5月22日(水) 正午
ディスカッショントピックの件名には,自分の名前・情報実験機番号を記述すること.
- Moodleに提出するもの
- シェルスクリプト本文
- 作成したシェルスクリプトの全文
- ダミー画像の枚数
- 動画を作成した月(複数ある場合はすべて記述すること)
- 動画を見た感想・考察
- 課題に関するコメント
- シェルスクリプト作成に当たって,工夫,または苦労した点.
- 作業協力者がいればその名前, 参考文献(ほかの人のレポートを参考にした場合もしっかり挙げること).
- もし他に言いたいことがあれば記述しても良い.
- 情報実験機上で提出するもの
- 作成したシェルスクリプト.
- スクリプトは各自のホームディレクトリに配置すること.
動画の再生方法
- 動画は X を立ち上げた状態で,動画が格納されているディレクトリ "gif" に移動し,下記コマンドを実行することで再生できる.
$ firefox kadai_MM.gif & |
注意点
- 情報実験機で作業する場合には本日の事前準備を参考に X window system を立ち上げましょう.
- 作業を終了する際は本日の事前準備を参考に X window system を終了し,必ずログアウトしましょう.
- 動画の作成には少し時間がかかります.気長に待ちましょう.
- 衛星画像には画像の欠けが存在するものがあります.また,画像ファイルが存在しない日時もあります.
- もし,情報実験機以外の環境で課題を行いたい場合,imagemagick パッケージを導入する必要がある.imagemagick は下記コマンドを実行することで導入できる.
# apt install imagemagick $ vim /etc/ImageMagick-6/policy.xml : : <policy domain="resource" name="memory" value="4GiB"/>
困ったときは
- わからないことがあったらまずは文献あるいはインターネット上の検索エンジンを利用しましょう.
- やっぱりわからないときは友達と相談しましょう.
- どうしてもわからないときは情報実験メーリングリスト inex-2024 を活用しましょう. 同じような疑問を持っている人の助けになるかもしれません.
ヒント
- やり方は一通りではありません. どうすれば一番楽か作業の順序立てを最初に考えましょう.
- コマンドの使い方が分からなくなったら man で調べましょう!
- 沢山のファイルに同じ処理を施すには, メタキャラクタや ループ処理が便利.
- パイプを活用して 複数のコマンドを組み合わせてみましょう.
- 一つのコマンドでも コマンドラインオプション によって様々な機能を発揮します. man やインターネットで いろいろ調べてみるべし.
- cat, grep, sed, awk等のよく使われる便利なコマンドを調べてみよう!
- ヒントに囚われず, 自由な発想をしよう!!
参考文献
本課題の衛星画像データは以下のサイトから引用しました.
<< 戻る (データ圧縮・解凍とアーカイブ) 次へ >> (付録: gnuplotについて) 情報実験 第 3 回 のトップへ >>