$ ls ./ir_with_huge_amount_of_files/errors/
मान लीजिए कि एक निर्देशिका यूनिक्स टाइमस्टैम्प के साथ चित्रों से भरा है, मेरा मतलब है कि कई जीबी या उससे भी अधिक में मापा जाता है। शेल-कमांड जैसे ls
अतिप्रवाह-शैली की चेतावनी मिलेगी क्योंकि वे लाखों (या अधिक) चित्रों के साथ काम करने के लिए डिज़ाइन नहीं किए गए हैं। मैं इतनी बड़ी मात्रा में फ़ाइलों का प्रबंधन कैसे कर सकता हूं? यदि, उदाहरण के लिए, मैं बीच में चित्र ढूंढना चाहता हूं (नाम और निर्माण समय में टाइमस्टैम्प के अनुसार), क्या कुछ फ़ाइल-सिस्टम है जो एक अंतर्निहित खोज सुविधा प्रदान करता है? आप किन आदेशों का उपयोग करेंगे? मैंने सहज ls
और कोशिश कीfind
आवश्यक झंडों के साथ लेकिन वे या तो बहुत धीमे थे या चेतावनी उत्पन्न कर रहे थे, इसलिए मैं सोच रहा हूं कि या तो मुझे बेहतर फाइल-सिस्टम की जरूरत है या डीबी या कुछ और जैसा कि चित्रों को प्री-इंडेक्स करने के लिए है। मुझे मूल रूप से एक सरणी की आवश्यकता है जिसके लिए फोटो के इनोड्स को कालानुक्रमिक क्रम में रखा जाना चाहिए। उसको कैसे करे? बाद में, यूनिक्स-टाइमस्टैम्प के साथ मेटाडेटा जोड़ा जा सकता था।
[अपडेट करें]
वर्तमान उत्तरों में एक गंभीर दोष है, लोग केवल अनुभवजन्य परीक्षणों के बिना क्रमबद्ध उत्तर पोस्ट करते हैं। यदि उन्होंने अपने सुझावों का परीक्षण किया होता, तो वे शायद विफल हो जाते। इसलिए, मैंने आपको एक कमांड-लाइन टूल बनाया है जिसके द्वारा आप सैंडबॉक्स को बड़ी मात्रा में फाइल बनाने के लिए बना सकते हैं और अपने सुझावों का परीक्षण कर सकते हैं जैसे 1e7 फाइलों की मात्रा। फ़ाइलों को उत्पन्न करने में बहुत समय लग सकता है इसलिए धैर्य रखें। यदि कोई ऐसा करने का त्वरित तरीका जानता है, तो कृपया कोड को संपादित करें। python code.py --help
सहायता प्राप्त करने के लिए टाइप करें। मज़े करो!
बहुत सी dirred फ़ाइलों को बनाने के लिए उदाहरण का उपयोग करें
$ 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
कोड testFill.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