web-dev-qa-db-ja.com

ディレクトリ内のすべてのサブディレクトリを別のディレクトリにシンボリックリンクする

フォルダ内のすべてのディレクトリを別のフォルダにシンボリックリンクしようとしています。たとえば、以下の構造では、folder2にシンボリックリンクされたサブフォルダーが必要です。

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

- /home/john/folder2
-- subfolder1
-- subfolder2

これは私がこれまでに試したことですが、私のbashスキルは錆びており、これは機能しません。

find /home/chris/folder1 -type d -maxdepth 1 -mindepth 1 -exec ln -s {} /home/john/folder2/{} \;
7

このレイアウトを想定:

% tree -L 2
.
├── top-1
└── top-2
    ├── sub-1
    ├── sub-2
    └── sub-3

そして、この望ましい出力:

% 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

そして、このバージョンのfind

% find --version
find (GNU findutils) 4.4.2

使用する:

find /tmp/sf-582772/top-2/ -maxdepth 1 -mindepth 1 -type d -exec ln -s '{}' /tmp/sf-582772/top-1/ \;

ここで指定したフルパスを必要なディレクトリに置き換えます。これは相対パスのバージョンです:

% pwd
/tmp/sf-582772
% find top-2 -maxdepth 1 -mindepth 1 -type d -exec ln -s ../'{}' top-1/ \;

与える:

% 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
12
Sam Halicke

私は試してみます:

find /home/chris/folder1 -type d -maxdepth 1 -mindepth 1 -print0 | xargs -0 ln -s -t /home/john/folder2

私は-exec引数を見つけるのが好きではなく、リテラルをエスケープする方法を正確に理解するのも好きではないので、通常は+ xargsを見つけるように振る舞います。

1
Slartibartfast

多分私は何かが欠けているかもしれませんが、それ以外の場合はベースの下に新しいディレクトリが作成されるたびにこれを実行する必要があります。これでうまくいきます。

ln -s /base/* /target && ls -l /target
1