좋아요, 그래서 폴더에 650 만개의 이미지가 있습니다. 나는 그것들을 그들 자신의 폴더 구조로 옮기 겠지만, 먼저 나는이 서버에서 움직여야한다.perl에서 "복사 실패 : 파일이 너무 큼"오류
나는 rsync와 cp 및 모든 종류의 다른 도구를 시도했지만 항상 오류가 발생합니다. 그래서 저는 좀 더 직접적인 방법으로 정보를 가져 오기위한 펄 스크립트를 작성했습니다. opendir을 사용하고 모든 파일을 계산하도록하는 것은 완벽합니다. 그것은 약 10 초 안에 모두를 셀 수 있습니다. 이제 스크립트를 한 단계 더 나아가 실제로 파일을 옮기고 "File too large"오류가 발생합니다. 파일 자체가 모두 상당히 작기 때문에 일종의 잘못된 오류 여야합니다.
#!/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";
혹시 혹시 혹시이 문제에 빠진 적이 있습니까? 이 문제의 원인은 무엇이며 어떻게 고칠 수 있습니까?
nfs에는 디렉토리에있을 수있는 최대 파일에 대한 하드 제한이 있습니다. –