将一个目录中的所有子目录符号链接到另一个目录

8 bash directory find symlink

我正在尝试将文件夹中的每个目录符号链接到另一个文件夹。例如,在下面的结构中,我需要符号链接到 folder2 的子文件夹。

- /home/chris/folder1
-- subfolder1
-- subfolder2

- /home/john/folder2
-- subfolder1
-- subfolder2
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止尝试过的方法,但是我的 bash 技能生疏了,这不起作用。

find /home/chris/folder1 -type d -maxdepth 1 -mindepth 1 -exec ln -s {} /home/john/folder2/{} \;
Run Code Online (Sandbox Code Playgroud)

小智 13

假设这种布局:

% tree -L 2
.
??? top-1
??? top-2
    ??? sub-1
    ??? sub-2
    ??? sub-3
Run Code Online (Sandbox Code Playgroud)

而这个期望的输出:

% tree -L 2
.
??? top-1
?   ??? sub-1 -> /tmp/sf-582772/top-2/sub-1
?   ??? sub-2 -> /tmp/sf-582772/top-2/sub-2
?   ??? sub-3 -> /tmp/sf-582772/top-2/sub-3
??? top-2
    ??? sub-1
    ??? sub-2
    ??? sub-3
Run Code Online (Sandbox Code Playgroud)

这个版本的find

% find --version
find (GNU findutils) 4.4.2
Run Code Online (Sandbox Code Playgroud)

用:

find /tmp/sf-582772/top-2/ -maxdepth 1 -mindepth 1 -type d -exec ln -s '{}' /tmp/sf-582772/top-1/ \;
Run Code Online (Sandbox Code Playgroud)

用您需要的目录替换此处给出的完整路径。这是一个带有相对路径的版本:

% pwd
/tmp/sf-582772
% find top-2 -maxdepth 1 -mindepth 1 -type d -exec ln -s ../'{}' top-1/ \;
Run Code Online (Sandbox Code Playgroud)

给出:

% tree -L 2
.
??? top-1
?   ??? sub-1 -> ../top-2/sub-1
?   ??? sub-2 -> ../top-2/sub-2
?   ??? sub-3 -> ../top-2/sub-3
??? top-2
    ??? sub-1
    ??? sub-2
    ??? sub-3
Run Code Online (Sandbox Code Playgroud)