Mümkün bir yol (bir veritabanı veya dosya kimliğini) dosyanın MD5 imzasını hesaplamak olabilir, ve sonra buna göre yolunu bulmak / kurmak istiyorum.
Örneğin, "1ff8a7b5dc7a7d1f0ed65aaa29c04b1e" gibi bir MD5 imza almak demek
Yol "/ 1f / f" veya "/ 1f/ff/8a" gibi görünebilir
Nedeni 1 klasördeki tüm dosyaları istemiyorum olduğunu, ve aynı derecede yayılmış-çıkış yolu farklı sunucular arasında "bölümü" onları, ya da bir SAN veya ne olursa olsun yeteneğine sahip istiyorum.
MD5 imza 16 "hex" bir karakter dizesidir. Yani "/ 1f/ff/8a" bizim örnek bize bu herkes için yeterli olmalı içeri dosyalarını depolamak için 256 * 256 * 256 klasörleri verir :)
Yoğun talep nedeniyle güncelleme:
NOTE - Ben sadece biz MediaWiki bunu nasıl hakkında özel bahsediyoruz gerçekleşmiştir. Bu not şimdi MediaWiki yapar, ama başka hangi yolu o could have been done.
: "MD5 imza" Ben böyle bir şey (Perl kod örnekleri) yaparak ortalama ile
use Digest::MD5 'md5_hex';
my $sig = md5_hex( $file->id );
$ Sig 32 alfa-sayısal karakter uzunluğunda şimdi: "1ff8a7b5dc7a7d1f0ed65aaa29c04b1e"
Sonra böyle bir klasör yapısını oluşturmak:
my $path = '/usr/local/media';
map { mkdir($path, 0666); $path .= "/$_" } $sig =~ m/^(..)(..)(..)/;
open my $ofh, '>', "$path/$sig"
or die "Cannot open '$path/$sig' for writing: $!";
print $ofh "File contents";
close($ofh);
Klasör yapısı gibi görünüyor
/
usr/
local/
media/
1f/
f8/
a7/
1ff8a7b5dc7a7d1f0ed65aaa29c04b1e