ふぁメモ

主に技術系のメモをしたいけどやっぱり適当日記。たまにPHPコード載ってるけどメモ書き程度のスクリプトなのでそのまま使っちゃダメ。

エラースキップ機能付きファイルコピー/移動ツールを作るの巻

序:Fire File CopyやFastCopyを愛用している

扱うファイルの内容に依るが、大量のファイル/フォルダを新しいストレージへ移動する際はベリファイ機能付きのツールを使わないと安心できない。

実際ベリファイエラーが出ることは稀だがたまにはある。ストレージ側の破損よりはメモリやOSがおかしい場合がほとんどだが…。

ただ、以前はWindows Explorerの性能が低かったのでツールが重宝していたが、最近は使い勝手が良くなってきているので、もうツールは使わなくても問題ないかもしれない。

エラースキップについて

エラースキップ機能も欠かせない。

状態の悪くなったストレージからファイルをサルベージする場合はエラーでよく処理が止まる。

何度かリトライして読める場合もあるが、大量にファイルがある場合、とりあえず後回しにして、読めるやつだけ先に移動してしまいたい。

最近エラーの傾向が変わってきた気がする

以前はファイルコピー時のエラーといえばCRCエラーが定番で、初っ端から読めないとエラーを吐かれることが多かった。

最近は内部的に自動的にリトライされているのか同じファイルに対して延々と読み取りが試行されて、10分くらい経ってからエラーになるか、あるいはストレージが過熱してしまって勝手にアンマウントされてしまうことが多い。

サーマルスロットリングで遅くなるのは仕方ないにしてもアンマウントされるのは困る。

それでもプロセスは動いたままだったり、エクスプローラが固まってしまったり、プロセスを強制終了することも適わず、最悪電源を切るしかなくなる。

上記のツールに搭載されているエラースキップ機能ではこのタイプのエラーには対処できない。

タイムアウトを自分で設定できるツールを作成した

そんなわけでエラースキップ特化のフォルダコピー/移動ツールを作ってみた。(Claude Opusがサクッと作ってくれた)

github.com Skipferry

30秒読めなかったら諦めてスキップする。ただそれだけのことができるファイルコピーツールだ。

タイムスタンプ維持やベリファイは当然入っている。

だが最近よく見るZone.Identifierや代替データストリーム(ADS)に関しては面倒そうなので触れないでおく。(※消えます)

スクリーンショット

余談

正直ファイルコピー・移動ツールを自作するのは怖い。一見正常終了していても実は壊れていた、なんてケースがありうるからだ。

これを使ったせいでファイルが壊れた、失われたなどと言われても責任は持てない。

まあRAWレベルでアクセスするわけではなくあくまでPythonが扱える範囲のOSのAPIのファイルアクセスしかしないので早々は壊れないと思いたいが…。

追記

書いてから調べたらTeraCopyで似たようなことができるらしい。

入れてみたがオプションには見当たらない。実際にエラーが起きた時の挙動を見たかったが、全ファイルスキップ扱いになるだけだったし、中断しようにもUIが固まってしまうタイプでダメだった。

しかし当然ながら使うなら実績あるツールのほうが良いよね。

もうちょっと使ってみるか、TeraCopy。

関連記事

fa.hatenadiary.jp

プライバシーポリシー |ページトップへ