好的,所以我在一个文件夹中有 650 万张图像,我需要尽快将它们移动。我会将它们移到它们自己的文件夹结构中,但首先我必须将它们移出此服务器。
我尝试了 rsync 和 cp 以及各种其他工具,但它们最终总是出错。所以我写了一个 perl 脚本以更直接的方法提取信息。使用 opendir 并让它计算所有文件非常完美。它可以在大约 10 秒内将它们全部数完。现在我尝试将我的脚本再提高一个档次,让它实际移动文件,我得到错误“文件太大”。这一定是某种错误错误,因为文件本身都很小。
#!/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";
那么你们中有人遇到过这种情况吗?什么会导致这种情况以及如何解决?