ChromeやFirefoxでダウンロードしたファイルを上書き保存(2)
前回→ChromeやFirefoxでダウンロードしたファイルを上書き保存 - ctrl-alt-moccos
最初はシェルスクリプトで回していました。思いついた瞬間は、コマンドラインでリネームくらいすぐだろと思ったんですが、結局めんどくさくなってPerlを呼んでいるスクリプト。
@moccos どうせperl使うんならforeach (glob '*\(1\)*')で回す.plでいいんじゃねとかちと気になったり(とか d.hatena.ne.jp/moccos_info/20…
— (@hide32767) 4月 25, 2012
…という至極真っ当な突っ込みをいただいて、書き直しました。
#!/usr/bin/perl while(1) { foreach(<*(1)*>) { next if (/\.crdownload$/); /(\S+)\s?\(\d\)(\.[^\.]+)?$/; $new_name = "$1$2"; if (rename($_, $new_name)) { print "$_ -> $new_name\n"; } #else { print STDERR "failed to rename: $_"; } } sleep(5); }
# 最初はsleepする秒数を引数から取るようにしたけど、特に細かい指定が必要な場面はなかった…
補足
- 中間ファイルの除外
Chromeがダウンロード完了前に生成する、hoge.bin.crdownload のような中間ファイルを除外する必要がありました。
Firefoxの場合は何になるんだろう。
- glob
ファイル名がドットで始まるファイルは引っかからないようです。そういうファイルを対象にしたいなら、変更の必要あり。Fileモジュールあたりか。
globで引っかけて中間ファイルを除外してリネーム…とマッチングが3段階あるのが気持ち悪いけども、性能が全くいらないところなのでまあいいかーという手抜き具合です。
- エラー処理
おそらく失敗する場面では連続でこけるので、else文を足してprintするだけだといまいち。それ以上はめんどくさかったので放棄。
- 処理内容が前に来る条件文
ループ制御文(break等)やexit等、一言だけで済むと構造上明らかな場合に、気分次第で使ってます。elsifやelseが増えたり、処理内容が増える可能性のあるところに使うとめんどくさいので、基本的には使わないほうが良いんでしょうね。