繁体   English   中英

在不使用 os.chdir() 的情况下在 python 中创建相对符号链接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM