我想要做的基本上是 cp -Rl dir1 dir2
。但据我了解,Python 只提供了 shutils.copytree(src,dst)
,它实际上复制文件,但没有硬链接文件的可能性。
我知道可以使用 subprocess
模块调用 cp
命令,但我更愿意找到一种更干净(Pythonic)的方法来实现。
那么有没有简单的方法来实现这个目标,还是我必须递归地实现它呢?
我想要做的基本上是 cp -Rl dir1 dir2
。但据我了解,Python 只提供了 shutils.copytree(src,dst)
,它实际上复制文件,但没有硬链接文件的可能性。
我知道可以使用 subprocess
模块调用 cp
命令,但我更愿意找到一种更干净(Pythonic)的方法来实现。
那么有没有简单的方法来实现这个目标,还是我必须递归地实现它呢?
os.system
调用,因为它比subprocess
给我的控制更少。特别是因为os.system
可能会悄悄失败。 - devsndcopy_function=os.link
是否真的存在,或者需要人工创建。(请参阅链接文档中的示例。)如果它确实存在,则os.symlink
也应该是可能的。 - not2qubitos.system
是一个糟糕的解决方案,应该避免使用。感谢shutil版本。 - sauerburger这是一个纯Python的复制函数,应该与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)