Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

treeで入手したディレクトリ構造をyamlファイル用に転換するワンライナー

結論

$ tree -dfi os | ruby -ryaml -e 'puts YAML::dump(ARGF.map{|e|"src/"+e.chomp}.slice(0..-3))'

参考:一つ前のバージョン

$ tree -dfi os | ruby -ryaml -ne '(data ||= []) << %Q(src/%s) % [$_.chomp]; END{ data.slice!(-3..-1); puts YAML::dump(data)}'

出力見本

- src/os
- src/os/core
- src/os/core/lib
- src/os/core/sys
...
- src/os/platform/cpu/avr/dev/usb/serial
- src/os/platform/cpu/native

……ワンライナーとギリギリ言い張れるレベルに収まりました(震え声

個別

tree

-i

ツリーコマンドのiオプションは名前の由来でもあるインデントまわりを綺麗にしてくれます。

-d

ディレクトリのみ表示

ruby

$_

標準出力から持ってくる組込み変数です。
chompと組み合わせて使わないと、%での文字生成で最後に処理されるため、変な感じになります。

-n

while ARGF.gets ~~ endを省略してくれる素敵オプションです。

||=

空オブジェクトの場合、後ろにあるオブジェクトを突っ込んでくれます。
速度を求める場合、最初にBEGIN{data =[]}とした方が多分速いです。
今回は文字数を減らしたいのでこうしました。