シス管系女子BEGINS 第0.3話

シス管系女子をシェア!

このエントリーをはてなブックマークに追加

1ページ目

(1ページ目)
第0.2話
似たような名前のファイルをまとめて操作したい

新人システム部員
利奈(ルビ:りな)みんと

あーっ!

またファイルがいっぱい
残ったままになってる!

編集するときに
バックアップ用の
ファイルが作られる

バックアップ用ファイルが
作業後も残ったままになる

「ゴミが残るからサーバー上で
ファイルを編集しないように」
って、言ってた先輩達の方が
やってるんじゃん!

うぅ、これ一個一個
消すのかぁ~~

どうしたの、
何かトラブル?


……っと、なるほど
ごみファイルがいっぱい
たまっちゃってるのね

そうなんですよ!

ファイル名が飛び飛びだから
がばっと選択して一気に消す
ってこともできなくて、
面倒で面倒で……

report-04
.bak

report-04
.txt

report-04
-edit.bak

report-
0405.bak

report-
0405.txt

report-
0406.bak

report-
0408.txt

report-
0410.txt

report-
0412.txt

2ページ目

(2ページ目)
先輩システム部員
大野(ルビ:おおの)桜子(ルビ:おうこ)

GUIのファイル選択だと
確かに面倒よね

でも、こういうのなら
コマンド操作で一発削除
できるわよ?

ええっ!?

report-04.bak
report-04.txt
report-04-edit.bak
report-0405.bak
report-0405.txt
report-0406.bak
report-0408.txt
report-0410.txt
report-0411.bak
report-0411.txt
report-0412.bak
report-0412.txt

消したいファイル

よく見ると、消したいごみファイルって
みんな「~.bak」って名前になってて
法則性があるでしょ?

こういうときは
パターンマッチ
が使えるわ


ぱ……
パターンマッチョ……?

マッチョじゃなくて
マッチ!


「マッチ」は
「条件にあてはまる」とか
「一致する」とかって意味よ

あぁ~~……確かに!

ちぐはぐなことを
「ミスマッチ」とか言いますね


それそれ!

その「マッチする」「マッチしない」で
コマンドの処理対象を指定するのが
パターンマッチよ


rmコマンドやmvコマンドを使うとき、
普通は具体的なファイル名を書くわよね

rm 01234.txt

mv 56789.txt abcde/

01234.txtという名前の
ファイルを削除する

56789.txtという名前のファイルを
abcdeという名前のディレクトリーに移動する

実はこれ、もっと抽象的に
書くことができるの!


えっ……

ファイルを抽象的に……!?

いや、なにも抽象画で
描けってわけじゃなくてね……

3ページ目

(3ページ目)
実際にやってみせたほうが
分かりやすいでしょ

私の環境からsshでログインして
操作するから、よく見ててね?

$ cd /var/shared/reports
$ rm *.bak█

「*.bak」を削除……?

そんな名前のファイル
無いですよ?

それじゃエラーに
なるだけなんじゃ……


まあまあ、
とにかく実行!

$ cd /var/shared/reports
$ rm *.bak
$ █

……あれっ!?

存在しない
ファイルだったのに、
エラーになってない?!


みんとちゃん、
そっちの画面の
ファイルの一覧を
見てみて?

一体何が……

……って、あああっ!!

report-04
.bak

report-04
-edit.bak

report-
0405.bak

report-
0406.bak

report-04
.txt

report-
0405.txt

report-
0408.txt

report-
0410.txt

あんなにいっぱいあった
ごみファイルが
なくなってる?!!?

なんでなんで
どーして!??!


鍵はこれ、
「*」(アスタリスク)よ!


「*」を含んだ「rm *.bak」ってコマンド列は
こういう意味になると思ってちょうだい

問題:

* .bak

という名前のファイルを
消してください

なんか、クイズ番組か
情報番組みたい……


さて、みんとちゃんなら
この問題をどう解く?

ええっ!?

こんなの解けるわけ
ないじゃないですか!!

4ページ目

(4ページ目)
あら、なんで
そう思うの?

だって、ノーヒントですよ!?

さっきのごみファイルは
全部これにあてはまるのに、
どれが正解かなんて……


……んんっ?

ごみファイルが全部
あてはまる……??


そう、ここでの正解は
「名前があてはまる
ファイルは全部消す」!

さっきの実行結果がまさに
そうだったでしょ?

rm

ほ、ほんとだあっ!!


ファイル名を書くところに「*」を書くと
「ここに何かが入ります」という
パターンを表すことになって、

* .bak

という名前のファイルを
消してください

rm

実行すると、パターンにあてはまる(ルビ:マッチする)
ファイルすべてが処理される……

これが「パターンマッチ」ってわけ!


こんなことが「*」の1文字で
できちゃうなんて……

コマンド操作って、
GUIが使えないとき用の古い操作方法
ってだけじゃあなかったんですね!

ずいぶんひどい
言われようね……


それにしても、いいこと
教えてもらいました!

あっさり終わったから、これで
元々やろうとしてた作業に
心おきなくとりかかれます!


それじゃあ
さっそく……

……あっ…!

今度は
どうしたの?

5ページ目

(5ページ目)
いろんなファイルが混ざってるところから、
日次のレポートだけ月別のフォルダーに
移動したかったんですけど……

これもファイル名が飛び飛びで、
一気に選択できないんですよ!

members-03.txt
members-04.txt
report-03.txt
report-0312.txt
report-0312.zip
report-0319.txt
report-0324.txt
report-04.txt
report-0405.txt
report-0405.zip
report-0408.txt
report-0410.txt
report-0411.txt

月次レポートは
移動しないでよい

無関係

「03」フォルダーに
移動したい

ファイル名の末尾が
「.txt」でない物は
移動しないでよい

「04」フォルダーに
移動したい


さっきの「rm *.bak」みたいに
パターンでまとめてファイルを移動
できればいいのになぁ~~

それ、普通に
できるわよ?


ええっ、
まじですか?!

パターンマッチは
rmコマンドの機能じゃなく、
シェルのコマンド操作で
共通して使える機能なの

mvも複数ファイルの
一括操作が可能だから、
パターン指定でまとめて
ファイルを移動できるわ!


じゃあ、端末を開いて
ここにcdして……

これで一発ですね!!

$ cd /var/shared/reports/
$ mv *.txt 04/
█

……あれぇええ!?

03
04
report-0312.zip
report-0405.zip

関係無いファイルまで
消えちゃった!??!


一体どこに……

ああああぁっ!!

report-0312.txt
report-0319.txt
report-0324.txt
report-04.txt
report-0405.txt
report-0408.txt
report-0410.txt
report-0411.txt
report-0412.txt
report-0416.txt
report-0418.txt
report-0420.txt
report-0421.txt


さっきの所にあったファイルが
全部移動されちゃってる!?

どうして~~っ?!!?


パターン指定が雑すぎ!

これじゃあ、ファイル名が
「.txt」で終わるものは全部
マッチしちゃうわよ!

mv *.txt 04/

問題:

* .txt

という名前のファイルを
「04」に移動してください

mv

6ページ目

(6ページ目)
こういうときは、マッチさせたい
ファイルの名前をよく見て
それらだけに共通する部分を探すの

report-0312.txt
report-0312.zip
report-0319.txt
report-0324.txt
report-04.txt
report-0405.txt
report-0405.zip
report-0408.txt
report-0410.txt
report-0411.txt

「04」に移動したいファイルの
名前で共通の部分

ほら、ファイル名の
末尾の方だけじゃなく
頭の方も共通してるでしょう?


ってことは、考え方としては
こうですかね……?

問題:

report-04 何か.txt

という名前のファイルを
「04」に移動してください

コマンド列で表現

mv report-04*.txt 04/

それを試すのは後にして、
まずはファイルを元の位置に
戻さなきゃね


パターンマッチは
パスでも使えるから、

$ mv 04/*.txt █

「04」ディレクトリーにある、
名前が「*.txt」にあてはまる
ファイルすべて

こう書けば、さっき移動した
ファイル全部を移動できるわ!


移動先は
こうですよね

現在のディレクトリーのフルパス

$ mv *.txt 04/
$ mv 04/*.txt /var/shared/reports/█

おっと!

それでも間違いじゃないんだけど、
もっといいやり方があるわよ


前回※、相対パスの中で「.」と書くと
そのディレクトリーそのものを表す
って説明したでしょ?

これを使えば、ファイルの移動先として
カレントディレクトリーを
簡潔に指定できるのよ!

mv 04/*.txt ./

「./」=カレントディレクトリー自身

mv

そ、そんな使い方が
あったんだ!

※「シス管系女子BEGINS」第0.2話を参照。


よ~し、それじゃ
もう一回……!

$ mv *.txt 04/
$ mv 04/*.txt ./
$ mv report-04*.txt 04/
█

どうだっ!

パターンにマッチ
しなかったファイル

members-03.txt
members-04.txt
report-03.txt
report-0312.txt
report-0312.zip
report-0319.txt
report-0324.txt
report-0405.zip

report-04.txt
report-0405.txt
report-0408.txt
report-0410.txt
report-0411.txt
report-0412.txt
report-0416.txt
report-0418.txt
report-0420.txt
report-0421.txt

……おっ、やりました!

今度はちゃんと
必要なファイルだけ
移動され……

7ページ目

(7ページ目)
……て、なぁ~~い!!

まだ余計なファイルが
移動されちゃってる!?

移動後のファイル

report-04.txt
report-0405.txt
report-0408.txt
report-0410.txt
report-0411.txt
report-0412.txt
report-0416.txt
report-0418.txt
report-0420.txt
report-0421.txt

月次のレポートファイル
(移動されて欲しくなかった)


えええ、なんで!?

こう書いてあったら
普通、絶対ここに
何か入りますよね?!

問題:

report-04   *  .txt

という名前のファイルを
「04」に移動してください

これで
「report-04.txt」まで
あてはまるって
おかしいですよ!


「*」は正確には、
「0文字以上の任意の文字」
って意味なのよ

「0文字」もありだから、
「ここに何も入らない」
=「この部分が無い」物も
パターンにマッチするのよね

report-04  .txt

mv

えええっ!?

そーいうことは
先に言って下さいっ!!


……でもまあ
1個だけだし、これくらいは
自分で戻せばいっか……

ちょっと、
みんとちゃん1

そういうのは
よくないわよ'


手動操作が増えるのは、
それだけミスが入り込む
余地が増えるってこと!

「操作が増えても
いいや」って考え方は
禁物なんだから!


そんなこと言われても、
できないものは
しょうがないじゃ
ないですか!

できないとは
言ってないわ

こういうときは
「*」じゃなくて
「?」(ハテナまたは
クエスチョン)を
使うの!

8ページ目

(8ページ目)
「ここに必ず何か1文字入る」ってことを
マッチングパターンの中で表すのが「?」よ

mv report-04??.txt 04/

問題:

report-04 ? ? .txt

という名前のファイルを
「04」に移動してください

「ここに何かが2文字入る」
って意味にしたければ、こうして
「?」を2つ並べればいいわ


じゃあ、もう1回
ファイルを元に戻して

で、「??」……っと

$ mv *.txt 04/
$ mv 04/*.txt ./
$ mv report-04*.txt 04/
$ mv 04/*.txt ./
$ mv report-04??.txt 04/
█

おおっ!

report-0405.txt
report-0408.txt
report-0410.txt
report-0411.txt
report-0412.txt
report-0416.txt
report-0418.txt
report-0420.txt
report-0421.txt

今度は日次のファイルだけ
移動できた!


今回のまとめ

●シェルのコマンド操作において
 処理したいファイルの名前に法則性が
 ある場合は、パターンマッチを使うと
 複数のファイルを一括指定できる。
●パターンマッチでは、「*」と書くと
 「そこに何も入らない」もしくは
 「何かが入る」という意味になる。
 (正確には「0文字以上の任意の文字列」)
●パターンマッチでは、「?」と書くと
 「そこに何か1文字入る」という意味になる。
●パターンマッチは
 シェルのコマンド操作で共通の機能なので、
 あらゆるコマンドに対して使える。


「ポーカー」や「大貧民」とかの
カードゲームで、任意のカードの
代わりに使えるカードのことを
「ワイルドカード」って
呼ぶんだけど……

それになぞらえて、
「*」や「?」のことも
ワイルドカードと呼ぶの


ワイルドカードを使ったパターンマッチは、
GUIでは難しいコマンド操作ならではのテクニックね

cp

zip

削除や移動だけじゃなく、
ファイルのコピーとか圧縮とか……

とにかくいろんな場面で使えて
業務効率化とか時短とかにも
つながるから、覚えておいて
損は無いわよ!


そのわりには
結構かかっちゃって
ますけど~~?

そりゃ
同じ操作を3回も
やり直してたら
時間もかかるわよ!

つづく。

第0.3話はここまで!

前の話へ

次の話へ

他のマンガを見る

拡散希望!

このエントリーをはてなブックマークに追加