Хорошо, у меня есть 6,5 миллиона изображений в папке, и мне нужно их как можно быстрее перенести. Я перенесу их в их собственную структуру папок, но сначала я должен переместить их с этого сервера.
Я пробовал 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";
Так кто-нибудь из вас сталкивался с этим раньше? Что может вызвать это и как это можно исправить?