2009-08-28 30 views
90

Tôi muốn liên kết (ln -s) tất cả các tệp nằm trong/mnt/usr/lib/vào/usr/lib/LINUX: Liên kết tất cả các tệp từ một đến thư mục khác

Có rất nhiều tệp, làm thế nào để làm điều đó nhanh chóng? :)

+0

Có bao nhiêu tệp "rất nhiều" và tốc độ bạn cho là "nhanh"? –

+3

Đây là 50:50 cho dù nó sẽ phù hợp với "serverfault" hoặc "superuser", nhưng nó không phải là lập trình, do đó, không cho stackoverflow. –

Trả lời

145
ln -s /mnt/usr/lib/* /usr/lib/ 

Tôi đoán, điều này thuộc về superuser.

+1

Điều này không bao gồm các tệp ẩn và liên kết toàn bộ thư mục. Nếu một trong những điều này không phải là những gì bạn muốn, hãy xem câu trả lời của tôi. Nếu không, đó là cách ngắn nhất. – Cascabel

+0

Bạn nói đúng. Nhưng các thư viện không được ẩn thường xuyên. Trong mọi trường hợp dotfiles có liên quan đến giải pháp của bạn có ích hơn. – flokra

+1

nó sẽ trỏ đến thư mục khác vĩnh viễn? – nmkyuppie

11

ln -s/mnt/usr/lib/*/usr/lib/

14

Các giải pháp được đăng sẽ không liên kết bất kỳ tập tin ẩn. Để đưa họ, hãy thử này:

cd /usr/lib 
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done 

Nếu bạn nên xảy ra để muốn đệ quy tạo ra các thư mục và các tập tin duy nhất liên kết (do đó nếu bạn tạo một tập tin trong một thư mục, nó thực sự là trong /usr/lib không /mnt/usr/lib), bạn có thể làm điều này:

cd /usr/lib 
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done 
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done 
+1

Tôi tin rằng điều này cũng nên làm việc như một cách để ký tự đại diện trong các tệp ẩn, nếu bạn đã mở rộng globbing bật trong bash. Nó khớp với mọi thứ bắt đầu bằng một dấu chấm, theo sau là một cái gì đó khác hơn là không có gì hoặc một dấu chấm khác (tức là nó loại trừ '. /' Và '../'): 'ln -s/mnt/usr/lib /.! (|.) */usr/lib' – Cascabel

68

GNU cp có tùy chọn tạo liên kết thay vì sao chép.

cp -rs /mnt/usr/lib /usr/ 

Lưu ý đây là phần mở rộng GNU không tìm thấy in POSIX cp.

+2

Thư mục hiện tại của bạn phải là/usr/để tạo liên kết tượng trưng theo cách này –

+0

@caf Nếu đích đến là thư mục hiện có, thì thư mục lib được tạo bên trong/usr/folder –

Các vấn đề liên quan