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 〜