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
とか使ったほうが良いとおもう。
なお、この記事は嘘ではない。