Làm cách nào để tôi liên kết từng tệp trong một thư mục này sang thư mục khác?


15

Nếu tôi có một thư mục /foochứa một vài tệp trong đó, làm thế nào để tôi liên kết từng mục /foovào /bar/?

Ví dụ, nếu /foocó các tập tin a, bc, tôi muốn tạo ra ba liên kết tượng trưng:

  • /bar/a -> /foo/a
  • /bar/b -> /foo/b
  • /bar/c -> /foo/c

Bạn có chắc chắn không chỉ muốn thanh symlink để foo?
Bradshaw giàu

Ứng dụng thực tế của việc này là tôi đã cài đặt một chương trình và muốn di chuyển các tệp thực thi của nó sang một thư mục tiêu chuẩn trong $ PATH của tôi thay vì thêm chương trình đã cài đặt vào đường dẫn.
Steven

Có vẻ như nó sẽ là một ý tưởng tốt hơn để chỉ cấu hình nó với --prefix=.
Hello71

Câu trả lời:


18

Bạn có thể sử dụng (GNU) cpvới --symbolic-linktùy chọn:

prompt$ mkdir foo
prompt$ cd foo
prompt$ touch a b c
prompt$ mkdir ../bar
prompt$ cd ../bar
prompt$ cp --symbolic-link ../foo/* .
prompt$ ls -l
total 0
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 a -> ../foo/a
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 b -> ../foo/b
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 c -> ../foo/c
prompt$

Điều này dường như là chính xác giải pháp. Tuyệt vời!
Steven

Điều này rất hoàn hảo.
noraj

bất kỳ cách nào để làm điều này áp dụng cho các thư mục là tốt? Khi tôi chạy này, tôi nhận được cảnh báo "cp: bỏ qua thư mục './baz'"
solidau

15

Hãy thử xem:

ln -s /foo/* /bar

Thư mục nguồn, như được chỉ định trong câu hỏi, là /foo. Lưu ý rằng nó phải được chỉ định đầy đủ (nghĩa là bắt đầu từ thư mục gốc), vì vậy các ví dụ khác sẽ trông như thế này:

ln -s /some/dir/with/baz/* destdir
ln -s /dir/to/link/from/* /dir/to/link/to
ln -s $PWD/stuff/* more/stuff

Điều này thậm chí làm việc?
ctrlc-root

@ root.ctrlc: Bạn phải chỉ định đường dẫn đầy đủ của nguồn (nằm /trong câu trả lời ban đầu của tôi). Tôi sẽ thêm một sự làm rõ.
Tạm dừng cho đến khi có thông báo mới.

Tôi nghĩ rằng nếu bạn muốn sao chép mọi thứ dưới dạng symlink chỉ bằng một lệnh, bạn phải sử dụng cp -s như @hlovdal trả lời, cp -rs /var/www/folder/ .sao chép mọi tệp của thư mục con dưới dạng symlink, không giống như ln -s /var/www/folder/ .ai đã sao chép các tệp của thư mục con trên máy tính của tôi.
baptx

2

Một cái gì đó như thế này?

cd /foo
for f in *; do ln -s $PWD/$f /bar; done
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.