最低限 Unix / Linux [II] 【6. 本日の課題】

  1. 事前準備
  1. シェル
  1. テキストエディタ
  1. シェルスクリプト
  1. データ圧縮・解凍とアーカイブ
  1. 本日の課題
情報実験第 3 回トップへ

本日の課題:シェルスクリプトの作成

本日の実習の内容+αを用いて, タイムスタンプ(ある出来事が発生した日時・日付・時刻などを示す文字列. 以下のページではファイルの最終更新時刻を意味する)がバラバラなファイルを日時がわかるようにリネームするスクリプトを書きましょう.

課題背景

とある研究室に所属しているM くん(仮名)は性格が超ずぼらなことで有名で, 机の上は書類の山,よく家では靴下などを床に脱ぎっぱなしにしています. もちろん彼のパソコンの中身にもその性格が如実に表れており, せっかくアーカイブした卒論用のパワーポイントのファイルも 命名規則が以下のようにぐちゃぐちゃでどれが最新のものかが 一目では分からない状態です.
ファイル名最終更新時刻
graduate.pptx2011/12/25 17:46
graduate02.pptx2011/12/28 22:12
graduate_new.pptx2012/01/04 09:12
      ・ 
      ・ 
      ・ 
graduate_kaizen.pptx2012/01/15 12:29
graduate_happyou.pptx2012/01/20 13:00
graduate_happyou_last.pptx2012/01/24 09:22
graduate_happyou_final.pptx2012/01/25 13:12
graduate_happyou_syuusei.pptx2012/02/03 15:04

※タイムスタンプ順に並んでいます
※ちなみに発表は2012/01/25 でした
※ファイルは100 個くらいあります

M 君「あー困った. 誰か日付が分かるようにファイルの名前を 変えてくれないかな?|д゚)チラッ」

さぁ,みなさんM 君の悩みを解決する手助けをしてあげましょう!

注1: M 君は架空の人物です. 三上ではありません.
注2: パワーポイントの資料の命名規則は一例です.
        決して実際の三上PC 内のファイル名を再現しているわけではありません.
注3: 今回の課題はM 君の悩みを解決するスクリプトを作成するわけではありません.

課題概要

以下のように, あるディレクトリの中には300 個のディレクトリがあり, その下には親ディレクトリと同じ名前のテキストファイルが存在します.

ディレクトリ/テキストファイル 例
        askso/askso.txt
        chamboa/chamboa.txt
        filham/filham.txt
        sdffg/sdffg.txt

それらのテキストファイルは1 行だけ文字列が書き込まれています.

テキストファイルの一例(sdffg.txt)

しかしながら, テキストファイルの中には"dummy" とだけ書かれたダミーファイルが存在します.

ダミーファイルの例(askso.txt)

以下では"dummy" と書かれた.txtファイルを「ダミーファイル」(上の例ではaskso.txt), それ以外を「本物のファイル」(上の例ではsdffg.txt)と呼ぶことにします. みなさんには, これらのファイルを仕分けし, ファイル名を見ただけでタイムスタンプ(最終更新時刻)が分かるようにリネームしてもらいます.

ファイル例: sdffg/sdffg.txt
                  -rw-r--r-- 1 inex inex 77 12月 20 1990 sdffg.txt
リネーム例: sdffg.txt => 19901220.txt

「本物のファイル」をタイムスタンプ順にすべて出力すると, あるアスキーアートが表示されます(アスキーアート(Ascii Art)とは記号などの文字を組み合わせて作成した絵のこと, 顔文字もアスキーアートの一つ).

みなさんには,

ということをやってもらいます. 以下にもう少し詳しい説明を書きます.

課題詳細

今回の課題の完成例はこうなります. 参考にしてください. なお, 皆さんにお配りするデータとは別のデータを用いているのでこのままコピペすることはできません.また, アスキーアートが出力されているresult.txt は著作権の関係上閲覧できないようにしています. 以下の仕様をすべて満たすスクリプト(time_rename.sh) を作成してください. また, スクリプトには実行権限を与えてください.

  1. データは以下のアドレスに tar.gz で圧縮されています. 今回の実習で行った解凍を行ってください(解凍時にタイムスタンプに関するWarning が出ますが無視してよいです. ).

    アドレスからダウンロードするには以下のコマンドを打ってみてください(ただし, 以下のコマンドは joho01-joho05担当の場合の例です. アドレスは自分の担当の情報実験機に合わせてください)
    $ wget http://www.ep.sci.hokudai.ac.jp/~inex/y2015/0501/practical/kadaidata/homeworktype1.tar.gz
  2. 自分のホームディレクトリ以下の作業ディレクトリ(ex. work ディレクトリ)にダウンロードしたファイルや作業成果を格納してください.
  3. "kadai/src_dir/" 以下のディレクトリに格納されている「ダミーファイル」は"kadai/dummy_dir" ディレクトリに格納し, そのファイル名はタイムスタンプに合わせて"YYYYMMDD_dummy.txt" としてください. ここで"YYYY" は西暦年(ex. 1990 年=> 1990), "MM" は月(ex. 5 月=> 05), "DD" は日(ex. 1 日=> 01) です. また本来はありえませんが, タイムスタンプが未来のものもあります. これは課題の仕様ですので, 気にしないでください.
  4. 「ダミーファイル」には検査済みのあかしとして, 一行目の最後に CHECKED を加えてください.
  5. "kadai/src_dir/" 以下のディレクトリに格納されている「本物のファイル」は"kadai/true_dir" ディレクトリに格納し, そのファイル名はタイムスタンプに合わせて"YYYYMMDD.txt" としてください.
  6. "kadai/true_dir" ディレクトリに格納したファイルの中身をタイムスタンプ順に"kadai/result.txt" へ出力してください.
  7. 最後に作成した"kadai/result.txt" と元となるアスキーアート(kadai/src_dir/ascii.txt)とを比較して, 正しくファイルが抽出できているかの確認作業も"time_rename.sh"内に記述してください.

提出内容

以下のものを suu に投稿してください. その際, それぞれ対応するタグに投稿してください.

注意点

困ったときは

ヒント




<< 戻る (データ圧縮・解凍とアーカイブ)      最初へ >> (実習の前準備)      情報実験 第 3 回 のトップへ >>

最終更新日: 2015/04/29 三上 峻 copyright © 2015 inex