ファイル操作課題

ファイルシステムとコマンドによるファイル操作について多くのことを学びました。それを使ってファイル操作の課題を行ない、自分自身の理解を確認しましょう。

概要

あなたの手元には以下のようなディレクトリ構造のファイル群があるはずです。

image-20240305181336833

これをコマンドを使って以下のような構造に組み換えてください。

image-20240305181358204

具体的には以下の操作をしてください。詳しい手順は後述します。

  1. report ディレクトリを作る
  2. その下に cal2024.txt, message.txt を作る
  3. JPEGs, PNGs ディレクトリを作る
  4. 画像ファイルをフォーマット別に JPEG, PNG のディレクトリに移動する

これらの作業が終われば、report ディレクトリをZIP形式で圧縮して、提出します。繰り返しますが、Finder の操作でやるのではありませんからね。コマンドによって作業するのですよ。

操作の詳細

以下、step by step で操作の詳細について示します。書いてある通りにやればできるでしょうが、何をやっているのか曖昧な状態で作業をしないように。その場合は「コマンドによるファイル操作」の資料を見ながら、理解を再確認してください。

1. report ディレクトリを作る

dirReport フォルダに cd して、mkdir コマンドで report ディレクトリを作ります。

yasuda@Hex dirReport % pwd                      <<< 作業ディレクトリが正しいことを確認
/Users/yasuda/Documents/dirReport
yasuda@Hex dirReport % ls                       <<< 初期状態のファイル一覧を確認
sample1.txt subdir
yasuda@Hex dirReport % mkdir report             <<< report ディレクトリを作成
yasuda@Hex dirReport % ls                       <<< 作業後に report が増えていることを確認
report      sample1.txt subdir
yasuda@Hex dirReport % 

この時、以下のように dirReport フォルダの内容が Finder ウィンドウで見えるようにしておけば、mkdir した途端にそれが Finder 表示に反映されるのがわかるでしょう。操作の結果を確認しながら作業することを勧めます。

image-20240305205857724

2. テキストファイルを二つ作る

2.1 cal2024.txt ファイルを作る

作成した report ディレクトリに cd して、cal コマンドで cal2024.txt ファイルを作ります。

cal コマンドは引数(ひきすう)なしで実行するとその月のカレンダーを表示します。

yasuda@Hex dirReport % cal
      3月 2024         
日 月 火 水 木 金 土  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30  
31                    
yasuda@Hex dirReport %

cal コマンドの引数として西暦を与えると、その年のカレンダーを表示します。

yasuda@Hex dirReport % cal 2024
                            2024
         1月                    2月                    3月           
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土  
    1  2  3  4  5  6               1  2  3                  1  2  
 7  8  9 10 11 12 13   4  5  6  7  8  9 10   3  4  5  6  7  8  9  
14 15 16 17 18 19 20  11 12 13 14 15 16 17  10 11 12 13 14 15 16  
21 22 23 24 25 26 27  18 19 20 21 22 23 24  17 18 19 20 21 22 23  
... (以下略)...

この表示を(画面に出すのではなく)ファイルに保存するようにします。「 cal 2024 > cal2024.txt 」とすると、cal 2024 コマンドの出力を cal2024.txt というファイルに保存します。

yasuda@Hex dirReport % cd report                   <<< report ディレクトリに cd 
yasuda@Hex report % ls                             <<< 作業前にファイル一覧を確認
yasuda@Hex report % cal 2024 > cal2024.txt         <<< ファイルを作成
yasuda@Hex report % ls                             <<< 作業後にファイルが増えていることを確認
cal2024.txt
yasuda@Hex report % cat cal2024.txt                <<< ファイルの中身を確認
                            2024
         1月                    2月                    3月           
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土  
    1  2  3  4  5  6               1  2  3                  1  2  
 7  8  9 10 11 12 13   4  5  6  7  8  9 10   3  4  5  6  7  8  9  
14 15 16 17 18 19 20  11 12 13 14 15 16 17  10 11 12 13 14 15 16  
... (以下略)...

2.2 message.txt ファイルを作る

次にテキストエディットを起動して、何か適当なことを5-10行くらい書いてください。ただし、テキストエディットはファイルフォーマットとして何種類かが選べます。テキストエディットの「フォーマット」メニューの上から「フォント」「テキスト」と続いて、すぐその下に「標準テキストにする」を実行してください。

起動時、つまり初期状態は Rich Text 編集モードですから、編集テキスト編集モードに変更するのですよ。

image-20240305204217919

適当なところで report フォルダの下に保存して、ls コマンドで所定の場所にファイルが保存されたことを確認してください。

yasuda@Hex report % ls                          <<< 作業後にファイルが保存されたことを確認
cal2024.txt message.txt
yasuda@Hex report % cat message.txt             <<< ファイルの内容を確認
私の名前は中野です。
落語が好きなので寿限無の名前を書きます。
じゅげむじゅげむごこうのすりきれ
...(途中略)...
ちょうきゅうめいのちょうすけ
yasuda@Hex report % 

3. JPEGs, PNGs ディレクトリを作る

report ディレクトリの下に mkdir コマンドで JPEGs, PNGs という二つのディレクトリを作ります。

yasuda@Hex report % ls                          <<< 作業前にファイル一覧を確認
cal2024.txt
yasuda@Hex report % mkdir JPEGs PNGs            <<< ディレクトリを作成
yasuda@Hex report % ls                          <<< 作業後にディレクトリができていることを確認
JPEGs       PNGs        cal2024.txt
yasuda@Hex report % 

mkdir コマンドは引数としてディレクトリ名を複数与えることができます。もちろん以下のように、一度に一つずつ作ることも可能です。

yasuda@Hex report % mkdir JPEGs
yasuda@Hex report % mkdir PNGs

4. 画像ファイルをそれぞれのディレクトリに移動する

続いて画像ファイルを、先ほど作成した JPEGs, PNGs ディレクトリに、JPEG, PNG 各画像フォーマットに合わせて移動させてください。

相対パスを意識した移動

例えば以下の KSU.jpg ファイルを JPEGs ディレクトリ以下に移動させる場合を考えます。

image-20240305221215086

移動は mv コマンドで行うのですが、現在の作業ディレクトリから見て、KSU.jpg ファイルは「一つ上の、その下にある subdir の下にある subsubdir の下にある images ディレクトリの下の KSU.jpg 」ということになります。これを相対パス指定で書くと、こうなります。

yasuda@Hex report % mv ../subdir/subsubdir/images/KSU.jpg JPEGs

ファイル名の補完機能を使って確認する

しかし本当に上の記述で合っているかどうか、なかなか自信が持てないものです。こういう時は Tab キーを使ったファイル名の補完機能を使うとコマンド記入時点で確認ができます。例えば「 mv ../ 」と入力した時点で、Tab キーを押してください。画面上には以下のように「一つ上」のディレクトリ階層にあるファイル名の候補が現れます。

image-20240305221953796

これで「ああ今このディレクトリ階層を覗いているんだな」とわかるでしょう。また、sub くらいまでタイプして Tab を押せば「 mv ../subdir/ 」まで補完してくれますし、そこでもう一度 Tab キーを押せば、今度は subdir の下の階層について出してくれます。

ワイルドカード

ところで mv コマンドで一つずつファイルを移していっても良いのですが、こういう時はワイルドカードが使えます。ワイルドカードとはファイル名指定の一部に「 * 」や「 ? 」を使うと、それがマッチするファイルを全て処理の対象としてくれる機能です。「 * 」は「複数の文字」、「 ? 」は「一つの文字」にマッチします。

以下に今回の images ディレクトリ以下でマッチするパターンの例を挙げておきます。

パターン マッチするファイル
* すべてのファイル
*.* すべてのファイル
*.jpg confectionaries.jpg, KSU.jpg, leaves.jpg すべての JPEG ファイル
*.png icon01.png〜icon6.png すべての PNG ファイル
icon*.png icon01.png〜icon6.png すべての PNG ファイル
icon0?.png icon01.png〜icon6.png すべての PNG ファイル
??????.* icon01.png〜icon6.png と、leaves.jpg (ドットより前が6文字)
???????*.* confectionaries.jpg (ドットより前が7文字以上)
*e* confectionaries.jpg, leaves.jpg (どこかに e が含まれるもの)

今回の場合であれば、*.jpg, *png などとファイルの種別ごとに指定すれば、二度の mv コマンド実行で移動作業が完了しますね。

圧縮と提出

ここまで正しくできたことを、Finder の表示などで確認してください。問題なければ、report ディレクトリを ZIP 圧縮して一つのファイルにまとめ、moodle に提出してください。

image-20240305223654558

操作としては、report ディレクトリ(フォルダ)を選択した状態で、Finder の「ファイル」メニューから「圧縮」を実行してください。以下のような report.zip ファイルが作成されるでしょう。

image-20240305223841997

これをmoodleに提出してください。

アーカイブ

なお、「 man zip 」としてマニュアルを見ると、冒頭に以下のように表示されます。

NAME
       zip - package and compress (archive) files

つまり zip はファイルを「圧縮」するだけでなく、「パッケージ化」「アーカイブ化」するものだ、となっています。具体的には「階層的なフォルダ構造を含めて、複数のファイルを一つのファイルにまとめる」と解釈してください。もちろん、アーカイブファイル、つまり単一の zip ファイルは、あとで展開することで元の階層的なフォルダ構造ごと復元してくれることが大前提です。

普通の英単語の「archive」の意味を押さえておくとイメージがつかみやすいと思います。

辞書を引こう
コマンドによる操作(CUI - Character User Interface, CLI - Command Line Interface)では、どうしても英単語を使うことになります。エラー・メッセージ、ヘルプ・メッセージなども英語が多いです。辞書を引くなり、機械翻訳サービスを使うなりして、とにかく読みましょう。package のような「なんとなく分かってそうな単語」も「pack=複数のものを容れ物に詰める」というイメージを持てば、zip の機能を理解しやすくなるでしょう。古代のラテン語でコマンドやメッセージが出たとしたら、コンピュータに対する理解はひどく難しくなるでしょう。英語なのです。呪文でなく、意味を汲みながら学習しましょう。