$ ls ./dir_with_huge_amount_of_files/errors/
디렉토리에 유닉스 타임 스탬프가있는 그림으로 가득 차 있다고 가정하면 많은 GB 또는 그 이상으로 측정 된 것을 의미합니다. 셸 명령 ls
은 수백만 (또는 그 이상)의 그림으로 작동하도록 설계되지 않았기 때문에 오버플로 스타일 경고를받습니다. 그렇게 많은 양의 파일을 어떻게 관리 할 수 있습니까? 예를 들어, 이름과 생성 시간의 타임 스탬프에 따라 중간에 사진을 찾으려면 내장 검색 기능을 제공하는 파일 시스템이 있습니까? 어떤 명령을 사용 하시겠습니까? 나는 편안 ls
하고find
필요한 플래그가 있지만 매우 느리거나 경고가 발생했기 때문에 그림을 사전 인덱싱하려면 더 나은 파일 시스템이나 db 또는 이와 유사한 것이 필요하다고 생각합니다. 기본적으로 사진의 inode를 시간 순서대로 배치 해야하는 하나의 배열이 필요합니다. 그렇게하는 방법? 나중에 유닉스 타임 스탬프가있는 메타 데이터를 추가 할 수 있습니다.
[최신 정보]
현재 답변에는 심각한 결함이 있습니다. 사람들은 경험적 테스트없이 일종의 답변을 게시합니다. 그들이 제안을 테스트했다면 실패했을 것입니다. 따라서 샌드 박스를 만들어 엄청난 양의 파일을 만들고 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()