-1

我需要为目录(dir1)中的文件创建符号链接。每个文件必须有一个符号链接,如果有一个具有相同文件名但在子文件夹中的文件,我需要创建一个带后缀的符号链接。这是一个示例:dir1 包含文件 exe1、sh1、bash。目录文件也包含文件 bash,以及文件 file1、file2、file3。

exe1 → dir1/exe1
sh1 → dir1/sh1
bash → dir1/bash
bash1 → dir1/paper/bash
file1 → dir1/paper/file1
file2 → dir1/paper/file2
file3 → dir1/paper/file3

代码是python。任何人都可以帮助我吗?

4

2 回答 2

0
import os, sys

def maker(inputdir, outputdir, suffix=""):
    if not (chechdir(inputdir) and chechdir(outputdir)): sys.exit(0)
    for pos in os.listdir(inputdir):
        name =  os.path.abspath(inputdir+"/"+pos)
        if os.path.isdir(name):
            maker(name, outputdir, suffix+"1")
        else:
            simlnkname = os.path.abspath(outputdir+"/"+pos)
            if os.path.exists(simlnkname):
                simlnkname += suffix
            os.symlink(name, simlnkname)


def chechdir(directory):
    if not (os.path.exists(directory) and os.path.isdir(directory)):
        print "Error directory ", directory
        return False
    return True

if __name__ == "__main__":
    inp = "dir1"
    outp = "dir2"
    maker(inp, outp)

Test it:

$ tree
.
├── dir1
│   ├── bash
│   ├── exe1
│   ├── paper
│   │   ├── bash
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   └── sh1
├── dir2
└── test.py

3 directories, 8 files
$ python test.py 
$ tree
.
├── dir1
│   ├── bash
│   ├── exe1
│   ├── paper
│   │   ├── bash
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   └── sh1
├── dir2
│   ├── bash -> /home/miha/exampldir/dir1/bash
│   ├── bash1 -> /home/miha/exampldir/dir1/paper/bash
│   ├── exe1 -> /home/miha/exampldir/dir1/exe1
│   ├── file1 -> /home/miha/exampldir/dir1/paper/file1
│   ├── file2 -> /home/miha/exampldir/dir1/paper/file2
│   ├── file3 -> /home/miha/exampldir/dir1/paper/file3
│   └── sh1 -> /home/miha/exampldir/dir1/sh1
└── test.py

3 directories, 15 files

It concept, what work in linux. So it's reason to clean outp (dir2 other words) before run it.

于 2013-08-21T12:37:16.430 回答
0

为什么不在创建新链接之前检查链接是否已经存在,并增加后缀直到获得新链接名称?

于 2013-08-21T10:53:26.963 回答