$ ls ./dir_with_huge_amount_of_files/errors/
Giả sử một thư mục chứa đầy hình ảnh với dấu thời gian unix, ý tôi là rất nhiều được đo bằng nhiều GB hoặc thậm chí nhiều hơn. Các lệnh như Shell ls
sẽ nhận được các cảnh báo kiểu tràn vì chúng không được thiết kế để hoạt động với hàng triệu (hoặc nhiều hơn) hình ảnh. Làm thế nào tôi có thể quản lý số lượng lớn các tập tin như vậy? Ví dụ, nếu tôi muốn tìm ảnh ở giữa (theo dấu thời gian trong tên và thời gian tạo), có một số hệ thống tệp cung cấp tính năng tìm kiếm tích hợp không? Những lệnh nào bạn sẽ sử dụng? Tôi đã thử thoải mái ls
vàfind
với các cờ cần thiết nhưng chúng là các cảnh báo rất chậm hoặc được tạo nên tôi nghĩ rằng tôi cần hệ thống tệp hoặc db tốt hơn hoặc một cái gì đó tương tự để lập chỉ mục trước cho các hình ảnh. Về cơ bản tôi cần một mảng mà các nút của ảnh nên được đặt theo thứ tự thời gian. Làm thế nào để làm điều đó? Sau đó, siêu dữ liệu với dấu thời gian unix có thể được thêm vào.
[Cập nhật]
Có một lỗ hổng nghiêm trọng trong các câu trả lời hiện tại, mọi người chỉ đăng các loại câu trả lời mà không cần kiểm tra theo kinh nghiệm. Nếu họ đã thử nghiệm đề xuất của họ, họ có thể sẽ thất bại. Do đó, tôi đã tạo cho bạn một công cụ dòng lệnh để bạn có thể tạo hộp cát để tạo số lượng tệp khổng lồ và kiểm tra các đề xuất của bạn như với số lượng tệp 1e7. Có thể mất nhiều thời gian để tạo các tệp vì vậy hãy kiên nhẫn. Nếu ai đó biết cách nhanh hơn để làm điều này, xin vui lòng chỉnh sửa mã. Gõ python code.py --help
để được giúp đỡ. Chúc vui vẻ!
Ví dụ sử dụng để tạo rất nhiều tập tin 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
Mã 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