Symlink tất cả các thư mục con trong một thư mục đến thư mục khác


7

Tôi đang cố gắng liên kết mọi thư mục trong một thư mục sang thư mục khác. Ví dụ, trong cấu trúc bên dưới, tôi cần các thư mục con được liên kết với thư mục2.

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

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

Đây là những gì tôi đã cố gắng cho đến nay, nhưng kỹ năng bash của tôi bị gỉ và điều này không hoạt động.

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

Câu trả lời:


12

Giả sử bố cục này:

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

Và đầu ra mong muốn này:

% 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

Và phiên bản này của find:

% find --version
find (GNU findutils) 4.4.2

Sử dụng:

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

Thay thế các đường dẫn đầy đủ ở đây bằng các thư mục bạn cần. Đây là một phiên bản với các đường dẫn tương đối:

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

Cung cấp:

% 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

1

Tôi sẽ thử:

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

Tôi không phải là một fan hâm mộ của đối số -exec cần tìm, và không phải là một người hâm mộ tìm ra chính xác làm thế nào để thoát khỏi nghĩa đen, vì vậy tôi thường xoay quanh để tìm + xargs.


1

Có lẽ tôi đang thiếu một cái gì đó, sau đó cái này cần được chạy mỗi khi một thư mục mới được tạo dưới cơ sở. Điều này làm việc cho tôi.

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

1
Điều này sẽ liên kết mọi thứ đã nghĩ, nếu bạn cần loại trừ, nó có thể trở nên phức tạp hơn.
FreeSoftwareServers

0

Đã vấp phải câu trả lời giống với câu hỏi đang tìm kiếm, tôi nghĩ tôi sẽ thêm một bản cập nhật cho những người tương lai nhìn vào điều này.

Vì vậy, chìa khóa là đảm bảo rằng thư mục đích chưa tồn tại!

Thí dụ:

  1. Xóa thư mục đích: target-directory
  2. Chạy: ln -s /path/to/base-directory/ /path/to/target-directory

Vì vậy, đối với câu hỏi ban đầu:

  1. Xóa thư mục: folder2
  2. Chạy: ln -s /home/chris/folder1/ /home/john/folder2

Tôi hi vọng cái này giúp được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.