さて、フォルダに650万枚の画像があり、できるだけ早く移動する必要があります。それらを独自のフォルダー構造に移動しますが、最初にこれらをこのサーバーから移動する必要があります。
rsyncやcp、その他のあらゆる種類のツールを試しましたが、常にエラーが発生します。そこで、より直接的な方法で情報を取得するためのperlスクリプトを作成しました。opendirを使用して、すべてのファイルをカウントさせると、完璧に機能します。それは約10秒でそれらすべてを数えることができます。ここで、スクリプトをもう1ノッチ上げて、実際にファイルを移動させようとすると、「ファイルが大きすぎます」というエラーが表示されます。ファイル自体はすべてかなり小さいので、これはある種の誤ったエラーであるに違いありません。
#!/usr/bin/perl
#############################################
# CopyFilesLite
# Russell Perkins
# 7/12/2010
#
# Tool is used to copy millions of files
# while using as little memory as possible.
#############################################
use strict;
use warnings;
use File::Copy;
#dir1, dir2 passed from command line
my $dir1 = shift;
my $dir2 = shift;
#Varibles to keep count of things
my $count = 0;
my $cnt_FileExsists = 0;
my $cnt_FileCopied = 0;
#simple error checking and validation
die "Usage: $0 directory1 directory2\n" unless defined $dir2;
die "Not a directory: $dir1\n" unless -d $dir1;
die "Not a directory: $dir2\n" unless -d $dir2;
opendir DIR, "$dir1" or die "Could not open $dir1: $!\n";
while (my $file = readdir DIR){
if (-e $dir2 .'/' . $file){
#print $file . " exsists in " . $dir2 . "\n"; #debuging
$cnt_FileExsists++;
}else{
copy($dir1 . '/' . $file,$dir2 . '/' . $file) or die "Copy failed: $!";
$cnt_FileCopied++;
#print $file . " does not exsists in " . $dir2 . "\n"; #debuging
}
$count++;
}
closedir DIR;
#ToDo: Clean up output.
print "Total files: $count\nFiles not copied: $cnt_FileExsists\nFiles Copied: $cnt_FileCopied\n\n";
それで、あなたの誰かが以前にこれに遭遇したことがありますか?これは何が原因で、どのように修正できますか?