いぬれおがんばれお

がんばる日記です

SCSSファイルをSASSファイルにワンライナーでコンバートする

先日Railsプロジェクトのテンプレートをerbからslimに変換しました。今度はscssファイルをsass記述に一括でコンバートしようと思っています。

その時に使ったワンライナーを参考に、コマンドをちゃんと理解しようと思います\(^o^)/

前回使ったものを理解する

find app/views -name "*.erb" -exec bundle exec erb2slim {} \;

このワンライナーはほぼfindだけで完結していますね!構文は[path] [options] [action]というように書いているので、こちらを分解して説明してみます。

path

ディレクトリをapp/viewsに指定

options

nameオプションを使ってerbファイルに絞る

action

検索後,commandを実行する。このとき{}をコマンドで用いることにより,検索結果をコマンドに引き渡す なので対象ファイルが{}でわたってきているので、それに対してerb2slimを実行

Linuxコマンド集 - 【 find 】 ファイルやディレクトリを検索する:ITpro

1つずつまとめていくと楽勝ですね!

上記を理解した上でsass用ワンライナーを書く

結論から書くと下記です、順番に分解していきます!

find ./app/assets/stylesheets/* -name '*.scss' -type f | while read -r d; do path=${d%.*}; sass-convert $d "${path}.sass"; rm $d; done  

find

find ./app/assets/stylesheets/* -name '*.scss' -type f ここまでですね

path

Railsプロジェクトのトップディレクトリで使うので、./app/assets/stylesheets/*までパスを指定

name

erbと同じくscssファイルのみの指定

type

-type c 指定したファイル・タイプを検索する。cはdがディレクトリを,fが通常ファイルを,lがシンボリック・リンクを表す

ということで通常ファイルのみを選択

Linuxコマンド集 - 【 find 】 ファイルやディレクトリを検索する:ITpro

while

while read -r d;
  do
    path=${d%.*};
    sass-convert $d "${path}.sass";
    rm $d;
done

pipeでfindの結果を引き渡しています。

whileの条件

while read -r d;

引き渡された結果をreadして、$dという変数にして回しています。readとしているので、引き渡されたリストの行数分だけ回します。 また、-rについては下記のようなオプションになっています。

-r   バック・スラッシュをエスケープ文字とみなさない

Linuxコマンド集 - 【 read 】 読み出したファイルを解釈する:ITpro

path=${d%.*};

変数dを正規表現で拡張をとりのぞき、変数pathに代入しています

sass-convert

引き渡された$dを、同じファイル名で拡張子をsassに変えた先を変換先としてコンバートをさせています。

rm $d;

使ったファイルを削除!

その他参考サイト: findのexecが便利 - マツモブログ find の -exec 内でパイプ|PC-Unix弄り始めました。 TIPS/Linux/042 - PukiWiki

sass-convertがかなり賢いので、ほぼ手直しなしでOKでした!

〜 fin 〜