$ ls ./dir_with_huge_amount_of_files/errors/
Bir dizinin unix zaman damgalarına sahip resimlerle dolu olduğunu varsayalım, birçok GB veya daha fazlasında ölçülen çok şey var. Gibi kabuk komutları ls
, milyonlarca (veya daha fazla) resim ile çalışmak üzere tasarlanmadığından taşma tarzı uyarılar alır. Bu kadar büyük miktarda dosyayı nasıl yönetebilirim? Örneğin, resmi ortada bulmak istiyorsam (ad ve oluşturma süresindeki zaman damgasına göre), yerleşik bir arama özelliği sunan bazı dosya sistemi var mı? Hangi komutları kullanırsınız? Konforu denedim ls
vefind
gerekli bayrakları ile ama ya çok yavaş ya da uyarılar üretti bu yüzden ya daha iyi bir dosya sistemi ya da db ya da resimleri önceden indekslemek için böyle bir şeye ihtiyacım olduğunu düşünüyorum. Temelde fotoğrafların inode kronolojik sırada yerleştirilmesi gereken bir dizi gerekir. Bu nasıl yapılır? Daha sonra, unix-zaman damgaları içeren meta veriler eklenebilir.
[Güncelleme]
Şu anki cevaplarda ciddi bir kusur var, insanlar ampirik testler olmadan sadece cevaplar gönderiyorlar. Eğer önerilerini test etselerdi, muhtemelen başarısız olurlardı. Bu nedenle, size büyük miktarda dosya oluşturmak ve önerilerinizi 1e7 miktarda dosya gibi test etmek için sanal alan oluşturabileceğiniz bir komut satırı aracı oluşturdum. Dosyaları oluşturmak uzun sürebilir, bu yüzden sabırlı olun. Birisi bunu yapmanın daha hızlı bir yolunu biliyorsa, lütfen kodu düzenleyin. Tip python code.py --help
Yardım almak için. İyi eğlenceler!
Çok sayıda dirred dosya oluşturmak için Kullanım Örneği
$ ls ./data2
ls: ./data2: No such file or directory
$ python testFill.py -n 3 -d 7
$ tree data2/
data2/
|-- 0
| |-- 1302407302636973
| |-- 1302407302638022
| `-- 1302407302638829
|-- 1
| |-- 1302407302639604
| |-- 1302407302641652
| `-- 1302407302642399
|-- 2
| |-- 1302407302643158
| |-- 1302407302645223
| `-- 1302407302646026
|-- 3
| |-- 1302407302646837
| |-- 1302407302649110
| `-- 1302407302649944
|-- 4
| |-- 1302407302650771
| |-- 1302407302652921
| `-- 1302407302653685
|-- 5
| |-- 1302407302654423
| |-- 1302407302656352
| `-- 1302407302656992
`-- 6
|-- 1302407302657652
|-- 1302407302659543
`-- 1302407302660156
7 directories, 21 files
Kod testiFill.py
# Author: hhh
# License: ISC license
import os, math, time, optparse, sys
def createHugeAmountOfFiles(fileAmount, dirAmount):
counter = 0
DENSITY = 1e7
dir = "./data/"
do = dir+str(counter)+"/"
while (os.path.exists(do)):
counter = counter+1
do = dir+str(counter)+"/"
os.mkdir(do)
for d in range(int(dirAmount)):
for f in range(int(fileAmount)):
timeIt = int(time.time()*1e6)
if (not os.path.exists(do)):
os.mkdir(do)
if (timeIt % DENSITY == 0):
counter = counter+1
do = dir+str(counter)+"/"
if (not os.path.exists(do)):
os.mkdir(do)
do = dir+str(counter)+"/"
if(not os.path.exists(do)):
os.mkdir(do)
f = open(do+str(timeIt), 'w')
f.write("Automatically created file to test Huge amount of files.")
f.close()
counter = counter +1
def ls(dir):
for root, dirs, files in os.walk("./data/"+dir):
print(files)
def rm(dir):
for root, dirs, files in os.walk("./data/"+dir):
for f in files:
os.remove("./data/"+dir+"/"+f)
def parseCli():
parser = optparse.OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="Location to remove files only in ./Data.", metavar="FILE")
parser.add_option("-n", "--number", dest="number",
help="Number of files to generate", metavar="NUMBER")
parser.add_option("-r", "--remove", dest="remove",
help="Data -dir content to remove", metavar="NUMBER")
parser.add_option("-d", "--dir", dest="dir",
help="Amount of dirs to generate", metavar="NUMBER")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
return parser.parse_args()
def main():
(options, args) = parseCli()
if (options.filename):
ls(options.filename)
if (options.number and options.dir):
createHugeAmountOfFiles(options.number, options.dir)
if (options.remove):
rm(options.remove)
main()
a/b/abcdef.jpg