信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    ターミナルって意外と便利だよって話

    挨拶初めまして!昨年にコアテックへ参加しましたとみーです! どうぞよろしくお願いします!!お正月は某惑星フロンティアでチャンピオンになるべく戦ってたり、某宇宙世紀ロボに乗り、傭兵となって戦う○○オペレーション2をやってたりしてました!それで終わりにするには色々とアレだろと思いましたので、一つ技術っぽいことでも書かせてもらおうと思います。ターミナルコマンドを話す前の前置き(読み飛ばし可)みなさん、ターミナルって知ってますか!?macに初期から設置されているCLIツールです!!より詳しい説明とかは「ターミナル mac」 とかでググれば沢山でてきますので省略します!windowsではコマンドプロンプトってやつが同じようなツールになりますが叩く事が出来るコマンドは色々と違います。 今回はターミナルコマンドを書かせて貰います。突然ですが、こんな出来事に出会ったことありませんか!?例えば、とあるWebで野菜を販売している八百屋さんのお話です。「りんご」や「キャベツ」など、様々な野菜や果物を売っておりましたが、今度新しく「青森県産のりんご」や「群馬県産のキャベツ」など、特別な産地を追加するとのこと!お客さんに見せる画像データも、特別美味しそうに見える別の物にしたいと言う話です!画像の新規追加や差し替えはとみーの仕事です!画像を受け取ったら早速やりましょう!お、やってきたやってきた!これが新しい画像たちが入ってるディレクトリ(フォルダ)ですね!!!カチカチッ(ダブルクリック)00001.jpg00002.jpg00003.jpg以下10000件以上の画像…うわあああぁぁぁぁぁぁ!?!!?「青森県産のりんご」や「群馬県産のキャベツ」の画像がどれか、わからないのである早速、八百屋さんにお問い合わせ。八百屋さんもすぐに対応してくれて、対応表を送ってくれました! やったね!!00001.jpg 青森県産のりんご00002.jpg 群馬県産のキャベツ00003.jpg 普通のりんご以下10000件以上の画像…なるほど、これでどれが何の画像なのか、わかるようになりました!あとは、このまま表示させちゃえばおしまいです!!「青森県産のりんご」は「00001.jpg」の画像を表示させてー。「群馬県産のキャベツ」は「00002.jpg」の画像を表示させてー……よしっ!(某指差し猫感先輩に怒られました。。。番号だけじゃわからない。 突然、まったく知らない「千葉県産のほうれん草」画像を差し替えて欲しいって言われたらどうするの?とのことおっしゃるとおり! それじゃ、この画像たちの名前を変えましょうか! うん!!……うん? この1万件以上の画像を……?ターミナルコマンドさぁ前置きが長くなりましたが、ここからが本番です。この1万件以上の画像名、それっぽいものに変えましょうという作業です。手元にあるのは以下のデータです。1万件以上の画像データ「〇〇の〇〇」という文字列 さて、それではターミナルコマンドの時間です。※注意ターミナルコマンドで今回書く内容「ファイル名変更」は基本的には不可逆です。元に戻すのは難しいです。失敗しても良いように必ずバックアップを取ったり、みんながアクセスする環境で何かを作ったり、移動させるコマンドを叩くのは出来る限りやめましょう。1.「青森県産のりんご」のような文字列だけを抜き取ります$ grep '.*の.*' 画像データリストのファイル > ○○の〇〇.txt 2.抜き取った「〇〇(都道府県や[普通])の」と「の〇〇(野菜や果物)」の全ての種類を洗い出す$ cat ○○の〇〇.txt | sed -e 's/の.*//g' |  sort -u > 都道府県や普通.txt $ cat ○○の〇〇.txt | sed -e 's/.*の//g' |  sort -u > 野菜や果物.txt 3.抜き取ったデータを元に、変換後の文字列名をつくりますここは手作業です。 「青森県産」→「aomori_」「りんご」→「apple」などに変換する対応表を作ります4.都道府県などの対応表を元にして、コマンドを叩き続けます(都道府県の関係上、どんなに最低でも47回を超えます)$ sed -e 's/青森県産の/aomori_/g' 画像データリストのファイル > 画像データリストのファイル_new $ sed -e 's/群馬県産の/gunma_/g' 画像データリストのファイル_new > 画像データリストのファイル_new … 5.野菜も同様に、[.jpg]という文字列を追加してコマンドを叩き続けます(全種類分、叩きます)$ sed -e 's/りんご/apple.jpg/g' 画像データリストのファイル_new > 画像データリストのファイル_new … 6.「画像データリストのファイル_new」を使って、画像データの名前を変換$ cat 画像データリストのファイル_new | xargs -I % mv % 以上!これで「00001.jpg」という「青森県産のりんご」の画像名を「aomori_apple.jpg」に変換する、という作業を1万件以上の画像にそれぞれ対応出来たはずです!(遥か大昔の案件を参考に身元が割れないよう改変して書いてるので、 コマンドが汚いとかいう意見があったり細かいところでミスが出る 可能性があるかもしれません。 何かしらの形で聞いてくれたら答えたいです)いや、待って。 都道府県とかで最低47回以上コマンド叩くの、面倒くさくない?4、5番の対応表を元にする手作業の部分ですね!? わかります!!似たようなコマンドをバシバシ叩くことでミスが出ますし、ここは直すべきですね!しかし、とみーが知ってるターミナルのコマンドは、引数は一つまで!つまり、とみー流のターミナルのコマンドじゃ対応できません!!なので、今度はシェルの話をしましょうか(次の機会があればです)ここまで長文を読んで頂いた皆様方、ありがとうございます!それでは〜