Chromeのダウンロードフォルダを変更 兼 Windows のファイル移動の遅さはどうにかならんのか

基本的過ぎることでも意外と気付かない、の巻。

こと Google モノが特に、しょーもない基礎的な機能に気付いてないことがある。大抵は「ややストレスだが変えるほどでもないよな」の閾値が微妙なヤツら。ダウンロードフォルダの変更も同じで、小さなダウンロードファイルばかり扱ってるうちは、「プチめんどうくさい」に過ぎないので、気になりつつも調べない。

「Chromeのダウンロードフォルダを変更」についてはこれだけ:

chrome_download_folder

みな知ってんだろうね。あたしゃアホなのでな。さっき知ったという次第。(というより以前に気付いて固定してしまって忘れてしまっている、というオチもないではない。こんなもんいちいちメモ取ったりしないし。)

そしてなぜに今更なのか、と。基盤地図情報ダウンロードサービスなのだ、元凶は。ここからのダウンロード、原則的に WEB UI を介してしかダウンロード出来ない、つまりブラウザのダウンロード機能に頼るしかない。というかどうにかスクレイパ的な処理を書けないかなぁと妄想はしてるが、妄想してるだけ、まだやろうとし始めてもいない。ので「ブラウザからのダウンロード」の宿命に粛々と従う。

基盤地図情報ダウンロードサービスの特に標高データのダウンロードが、ほぼ地図 UI からのダウンロードしか実用にならなくて、なので目視でチマチマ選択する、というだけでも十二分にストレスになるんだけれど、「ダウンロードしたあと何をするのか」、である。ワタシの場合、ダウンロード後にこんなステップを繰り返している:

  1. 「オレオレ変換スクリプト」が期待する処理フォルダの「そば」に、ダウンロードした zip を移動
  2. (zipはかさばるのでやだが苦労してダウンロードしたのを消すのもやなので tar+bz2 に再圧縮)
  3. 「オレオレ変換スクリプト」が期待する処理フォルダにその zip を展開
  4. 「オレオレ変換スクリプト」で xml (GML) を変換して「オレオレ的に都合が良い」形式に変換

一日一回やるくらいなら例によって「やや気になるが一回我慢すればいいだけ」だけれど、このサイクルを日に何度も繰り返してるとさすがに無視できなくなってくる。上のステップのどのステップも数分オーダーの激重処理だが、そもそもが「ダウンロードした zip を移動」だけで分単位の時間を費やす意味がわからない、ということである。

そもそも(少なくとも古参の) Unix ユーザは、「パーティションをまたがない限りは、移動はほぼゼロコストである」ことに慣れている。これはディレクトリエントリの名前入れ替えだけだから。最近の Unix は良く知らないけど。

Windows のファイル移動も、急激に遅くなったのは Windows Vista あたりからだったと記憶している。もっと前だと Windows Server 2003 とかもファイル移動の遅さに悶絶してたりした。けれども、これはおそらく「(主としてセキュリティ目的の監視のための)コールバックが最底辺の API レベルで差し込まれるから」なのだろう、と想像して、あまり怒らずに我慢しようとは思ってきた。(コールバックはプログレスバーの実装なんかにも使われるヤツで、実在してるのはホント。これが原因で遅いのかはワタシの想像。)どんな理由であれ、Windows のファイル移動は、呆れるほどに遅いわけだ。

ワタシの場合 MSYS ユーザなので、MSYS 環境にいれば移動などの操作も MSYS からやることが多いんだけれど、MSYS は「ネイティブな Windows 操作よりも重い」ことも多々あって、重いときにはまっさきに MSYS を疑う癖がついてしまってはいる。けれども移動が遅いのはやはり MSYS のせいではないようだ。当然 explorer から操作しても遅いし、python の shutil.move でも呆れるほどに遅いのは同じ。

今 471MB の「PackDLMap.zip」をダウンロードしてきたので、試しに色々な「移動」をやってみる。

まずエクスプローラで…とやろうとして別のことに気付いたが後述。とにかく「ダウンロード」フォルダから目的の場所への移動。28秒。

次。MSYS の move。

1 me@host: ~$ time mv /c/Users/hhsprings/Downloads/PackDLMap.zip __arch2
2 
3 real    0m48.075s
4 user    0m0.000s
5 sys     0m0.030s

48 秒。死にそうだ。

python の shutil。

1 me@host: ~$ time python -c 'import shutil ; shutil.move("c:/Users/hhsprings/Downloads/PackDLMap.zip", "__arch2")'
2 
3 real    0m55.816s
4 user    0m0.000s
5 sys     0m0.016s

一回きりじゃなんともいえんけど、さっき別の機会でも体感で MSYS の move より遅かったように思った。遅いんだろうな、たぶん。

以前ファイル削除が PowerShell で高速だったので、ひょっとしたら移動も速いかしら?

1 Move-Item c:/Users/hhsprings/Downloads/PackDLMap.zip __arch2

50秒くらい。変わらんね。






「別のことに気付いた」件。

あー、そうか…。「ダウンロードフォルダから」だからなんだ。「アヤシゲなもの置き場になりがち」なブラックリストフォルダなのね、ここ。おそらく、だけど、監視フォルダにひっかかってると、インストールしてあるウィルスバスターとかのセキュリティソフトが反応してるんじゃないだろうか? 「ダウンロードフォルダ以外からダウンロードフォルダへ」は一瞬(0.1秒以内)で終わるのな。エクスプローラ、python shutil、powershell どれも。そういうことか…。(なのでおそらく、お手持ちの環境によって結果が全然違うと思う。)

というわけで、ひとまずは「chrome にはダウンロードフォルダを都度質問させる」でまぁまぁ幸せにはなれますな。