Skip to content

Instantly share code, notes, and snippets.

@polymorphm
Last active December 15, 2015 06:49
Show Gist options
  • Save polymorphm/5219319 to your computer and use it in GitHub Desktop.
Save polymorphm/5219319 to your computer and use it in GitHub Desktop.
#!/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