Рекурсивное создание жестких ссылок с использованием python
В основном я хотел бы сделать cp -Rl dir1 dir2
. Но, как я понимаю, python предоставляет только shutils.copytree(src,dst)
, который фактически копирует файлы, но не имеет возможности жесткой привязки файлов.
Я знаю, что я мог бы вызывать команду cp
с помощью модуля subprocess
, но я бы предпочел найти более чистый (pythonic) способ сделать это.
Итак, есть ли простой способ сделать это или я должен сам реализовать его, рекурсивный через каталоги?
Ответы
Ответ 1
Вам просто нужно позвонить os.system("cp -Rl dir1 dir2")
, не нужно вручную писать свою собственную функцию.
Отредактировано. Поскольку вы хотите сделать это в python.
Вы правы: это IS доступно в модуле shutil
shutil.copytree(src, dst, copy_function=os.link)
Ответ 2
Здесь используется чистая пиктоновая функция. Должен работать так же, как cp -Rl src dst
import os
from os.path import join, abspath
def hardcopy(src, dst):
working_dir = os.getcwd()
dest = abspath(dst)
os.mkdir(dst)
os.chdir(src)
for root, dirs, files in os.walk('.'):
curdest = join(dst, root)
for d in dirs:
os.mkdir(join(curdst, d))
for f in files:
fromfile = join(root, f)
to = join(curdst, f)
os.link(fromfile, to)
os.chdir(working_dir)