ChromeやFirefoxでダウンロードしたファイルを上書き保存(2)

前回→ChromeやFirefoxでダウンロードしたファイルを上書き保存 - ctrl-alt-moccos
最初はシェルスクリプトで回していました。思いついた瞬間は、コマンドラインでリネームくらいすぐだろと思ったんですが、結局めんどくさくなってPerlを呼んでいるスクリプト

…という至極真っ当な突っ込みをいただいて、書き直しました。

#!/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が増えたり、処理内容が増える可能性のあるところに使うとめんどくさいので、基本的には使わないほうが良いんでしょうね。