Last active
December 15, 2015 06:49
-
-
Save polymorphm/5219319 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
# -*- mode: python; coding: utf-8 -*- | |
# | |
# ОПИСАНИЕ: | |
# | |
# скрипт который должен создать "директорию-убийцу"! | |
# | |
# это такая *пустая* директория, некоторые операции внутри которой | |
# будут производиться очень медленно. | |
# например банальная операция "получить список файлов". | |
# | |
assert str is not bytes | |
import sys, os, os.path, random | |
FILE_NAME_CHAR_LIST = \ | |
'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \ | |
'abcdefghijklmnopqrstuvwxyz' \ | |
'0123456789' \ | |
'-=_+' | |
def create_dir(dir_path, file_count): | |
file_list = [] | |
os.makedirs(dir_path, exist_ok=True) | |
for file_i in range(file_count): | |
file_name = ''.join(random.choice(FILE_NAME_CHAR_LIST) for c_i in range(3)) | |
while file_name in file_list: | |
file_name += random.choice(FILE_NAME_CHAR_LIST) | |
file_list.append(file_name) | |
file_path = os.path.join(dir_path, file_name) | |
with open(file_path, 'w') as fd: | |
pass | |
return tuple(file_list) | |
def erase_dir(dir_path, file_list): | |
file_list = list(file_list) | |
random.shuffle(file_list) | |
for file_name in file_list: | |
file_path = os.path.join(dir_path, file_name) | |
os.remove(file_path) | |
def main(): | |
if len(sys.argv) != 3: | |
print('using: {} <test_dir_path> <file_count>'.format(sys.argv[0])) | |
return | |
dir_path = sys.argv[1] # путь к будущей "директории-убийце" | |
file_count = int(sys.argv[2]) # число файлов должно быть порядка миллиона | |
# создаём много файлов... | |
print('creating...') | |
file_list = create_dir(dir_path, file_count) | |
# удаляем файлы (но не удаляем директорию)... | |
print('erasing...') | |
erase_dir(dir_path, file_list) | |
# в конечном итоге может получиться "директория-убийца" | |
# (зависит от файловой системы и прочих обстоятельств). | |
print('done!') | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment