说我有一个文件的路径:
/path/to/some/directory/file.ext
在python中,我想在与文件相同的目录中创建一个符号链接 指向该文件。我想最终得到这个:
/path/to/some/directory/symlink -> file.ext
我可以使用os.chdir()相当容易地执行此操作来cd到目录中 创建符号链接。但os.chdir()不是线程安全的,所以我想避免 使用它。假设进程的当前工作目录不是 带有文件的目录(os.getcwd()!='/ path / to / some / directory'), 什么是最好的方法呢?
我想我可以在我所在的任何目录中创建一个被破坏的链接 将其移动到包含文件的目录:
import os, shutil
os.symlink('file.ext', 'symlink')
shutil.move('symlink', '/path/to/some/directory/.')
有更好的方法吗?
注意,我不想最终结果是:
/path/to/some/directory/symlink -> /path/to/some/directory/file.ext
答案 0 :(得分:19)
您还可以使用os.path.relpath()
,以便可以使用带有相对路径的符号链接。假设您的脚本位于目录foo/
中,并且此目录包含子目录src/
和dst/
,并且您希望在dst/
中创建相对符号链接以指向{{}中的文件1}}。为此,您可以这样做:
src/
列出import os
from glob import glob
for src_path in glob('src/*'):
os.symlink(
os.path.relpath(
src_path,
'dst/'
),
os.path.join('dst', os.path.basename(src_path))
)
的内容,然后显示:
dst/
如果要创建整个1.txt -> ../src/1.txt
2.txt -> ../src/2.txt
目录树的tarball,相对符号链接很有用,因为我不相信foo
更新符号链接指向生成的tarball内部的相对路径
答案 1 :(得分:13)
您可以将第二个参数设置为目标,例如:
import os
os.symlink('file.ext', '/path/to/some/directory/symlink')