Рассмотрим возможности модуля shutil Python. В можете перемещать удалять папки и файлы. Можно пойти другой дорогой: вызывать sh команды при помощи python. Это довольно сложный путь. В этом модуле довольно просто выполняется рекурсивное копирование файлов. Если у вас операционная система linux, то воспользуйтесь следующим кодом:
mkdir folder1
cd folder1
touch file{1..10}.txt
ls
#вывод:
file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt\
file6.txt file7.txt file8.txt file9.txt
Если у вас операционная система виндовс, то вручную создайте папку folder1 и разместите в ней 10 файлов. Теперь рассмотрим функции модуля shutil.
copyfile(<исходный путь>,<путь назначения>) копирует содержимое файла из исходной пути в путь назначения. никакие метаданные не копируются. позволяет скопировать файл из одной директории в другую. Вы можете при копировании изменить название файла. Скопированный файл будет иметь новое имя.
#!/usr/bin/python3
import shutil, os
#копирую файл
shutil.copyfile('./folder1/file1.txt','./folder2/file1.txt', follow_symlinks=True)
copytree(<исходный путь>,<путь назначения>) рекурсивное копирование файлов и папок. Копирование происходит из исходного пути в путь назначения. Тут учитывается вложенность папок. Вся иерархия папок и файлов сохраняется. Я использовал функцию os.getcwd() для определения текущего положения. Благодаря функции os.listdir можно осмотреть директорию. Если вы не знакомы с модулем os, то предлагаю посетить страницу модуль os Python.
#текущая директория
cur_dir = os.getcwd()
#копирую дерево
shutil.copytree(cur_dir + '/folder1', cur_dir + '/folder2/')
#осмотр директории
data = os.listdir(cur_dir + '/folder2/')
print(data)
'''
вывод:
['file10.txt', 'file2.txt', 'file9.txt', 'file1.txt', 'file7.txt', 'file5.txt',\
'file8.txt', 'file4.txt', 'file6.txt', 'file3.txt']
'''
shutil.move(<исходный путь>,<путь назначения>) - копирует содержимое файла из исходной пути в путь назначения. В результате происходит копирование файлов. Затем происходит удаление старых файлов (не перемещённых файлов).
#перемещение директории с переименованием папки
cur_dir = os.getcwd()
#копирую дерево
shutil.move(cur_dir + '/folder1', cur_dir + '/folder2/')
#осмотр директории
print(os.listdir(cur_dir))
'''
вывод:
['folder2', '__pycache__', 'copy_dir.py']
'''
shutil.rmtree(<исходный путь>, ignore_errors=False, onerror=None) - выполняет рекурсивное удаление файлов и папок. Используйте осторожно эту функцию. <исходный путь> должен указывать на директорию, а не на символическую ссылку. Если ignore_errors=True, то ошибки, возникающие в результате неудавшегося удаления, будут проигнорированы. Если False (по умолчанию), эти ошибки будут передаваться обработчику onerror, или, если его нет, то возникнет исключение.
#рекурсивное удаление файлов и папок
cur_dir = os.getcwd()
#рекурсивное удаление папок
shutil.rmtree(cur_dir + '/folder2')
print(os.listdir(cur_dir))
'''
вывод:
['__pycache__', 'folder1', 'copy_dir.py']
'''