定食屋おろポン

おろしポン酢と青ネギはかけ放題です

Rubyのワンライナーでファイルパスをファイル名に落としこみつつflattenする

自分でもタイトルの意味がわからんけど、要するに

こいつを

./01/hoge.png
./02/fuga.png
./03/01/moga.png
./03/02/piyo.png

こうしたいときがたまにある。

./dest/01-hoge.png
./dest/02-fuga.png
./dest/03-01-moga.png
./dest/03-02-piyo.png

ワンライナーで行ける

% ruby -r FileUtils -e "Dir.glob('**/*.png').each{|path| FileUtils.mv(path, './dest/' + path.gsub(/\//, '-'))}"

怖かったらdry-runすればいい

% ruby -r FileUtils -e "Dir.glob('**/*.png').each{|path| FileUtils.mv(path, './dest/' + path.gsub(/\//, '-'), :noop=>true, :verbose=>true)}"

findとかmvとかsedとか難しいんでこれで。 まじめにやるならFile.joinとか使ったほうが良いとおもう。

なお、この記事は嘘ではない。