こんばんわ
今日はDELLのパソコンのデータをバックアップしようとしたら、なんだかコピーにやたら時間がかかり待てど暮らせど終わりません。パソコン使っていて待たされるのってとても変ですよね。パソコンを使ってたくさん時間がかかってしまうことを早く終わらせたいのに、ちゃんと動作させるために時間を使ってしまうのはなんだか本末転倒というやつです?実際の現場でも「プログラムを書いてテストして自動にするよりも手でやってしまったほうが早くね?」という話になることもありますが、パソコンを使って効率的にしようと思ったのになんだかすごく時間かかってしまったなんてことになりたくないですね。
まあちょっと話がそれてしまいましたが、私は、Macをバックアップするときは TimeMachineを使ってやっています。MacのParallelsで動いているWindowsのバックアップはMacをバックアップするときに、Parallelsのイメージをバックアップするようにしていてそれでよしとしています。今日話題にしているDELLのバックアップはUsersの自分のディレクトリだけrobocopyでバックアップしています。しかもみんな外付けUSBにバックアップするという古いやり方です。まあそんな感じで今日も久しぶりにrobocopy してみたところ、やったら時間がかかっていつまでたっても終わらないのでログを見てみると、以下のようなログが大量に表示されています。
2018/06/23 21:31:43 エラー 87 (0x00000057) ファイル属性を変更しています c:\users\XXXXXX\Documents\Arduino\libraries\Bridge\keywords.txt
パラメーターが間違っています。
パラメーターが間違っています。
実際にそのファイルを見てみたところ、一見問題なさそうなのですが、よーくよく見ると更新日時が空欄です。
ファイルのプロパティを見てみたところ、更新日時がへんです。
へんというか、日付が0なんですかね?0というよりちょっとマイナス?Windowsで0の時っていつだったか思い出せませんが、とにかくおかしいことは確かです。よくわからないので、作成日時を更新日時に設定しちゃおうと思います。
こんなPerl作ってやりました。オプションにディレクトリを指定すると再帰的に潜っていって、見つけたファイルすべて、作成日時を取得して、更新日時に設定してしまいます。すごい適当です。エラーチェックとかは各自作りこんでください(笑)
#!/usr/bin/perl
use warnings;
use strict;
use Date::Manip;
my $top_dir=$ARGV[0];
use warnings;
use strict;
use Date::Manip;
my $top_dir=$ARGV[0];
use File::Find;
find(\&process, $top_dir);
sub process{
my $filename =$_;
my $curdir=$File::Find::dir;
chdir $curdir;
my @s = stat $filename;
my $atime=$s[8];
my $ctime = $s[10];
my $mtime=$ctime;
print "$atime,$mtime,$filename\n";
utime $atime, $mtime, $filename;
}
my $filename =$_;
my $curdir=$File::Find::dir;
chdir $curdir;
my @s = stat $filename;
my $atime=$s[8];
my $ctime = $s[10];
my $mtime=$ctime;
print "$atime,$mtime,$filename\n";
utime $atime, $mtime, $filename;
}
ほら、日付が表示されるようになりました。
更新日時が表示されるようになったら先ほどのエラーは出なくなりました。
ほかにもあるのかな。。。とりあえずrobocopy が終了したので良しとします。
0 件のコメント:
コメントを投稿