[英]Creating a relative symlink in python without using os.chdir()
假设我有一个文件的路径:
/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
您还可以使用os.path.relpath()
以便您可以使用具有相对路径的符号链接。 假设您的脚本位于foo/
目录中,并且该目录具有子目录src/
和dst/
,并且您希望在dst/
中创建相对符号链接以指向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
如果您想创建整个foo
目录树的 tarball,则相对符号链接很有用,因为我不相信tar
更新符号链接以指向生成的 tarball 内部的相对路径。
您可以将第二个参数设置为目标,例如:
import os
os.symlink('file.ext', '/path/to/some/directory/symlink')
python函数创建一个相对符号链接:
def relative_symlink(src, dst):
dir = os.path.dirname(dst)
Src = os.path.relpath(src, dir)
Dst = os.path.join(dir, os.path.basename(src))
return os.symlink(Src, Dst)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.