Tạo liên kết tượng trưng - ghi đè nếu tồn tại


54

Tôi muốn lấy dữ liệu xuống /path/to/data/folder/month/date/hour/minute/filevà liên kết dữ liệu đó /path/to/recent/filevà thực hiện việc này tự động mỗi khi tệp được tạo.

Giả sử tôi sẽ không biết trước nếu /path/to/recent/filetồn tại, làm thế nào tôi có thể tạo ra nó (nếu nó không tồn tại) hoặc thay thế nó (nếu nó tồn tại)? Tôi chắc chắn rằng tôi chỉ có thể kiểm tra nếu nó tồn tại và sau đó thực hiện xóa, liên kết tượng trưng, ​​nhưng tôi tự hỏi nếu có một lệnh đơn giản sẽ làm những gì tôi muốn trong một bước.


Nếu đích đến tồn tại, nhưng không phải là một liên kết tượng trưng, ​​bạn muốn / mong đợi điều gì xảy ra?
Toby Speight

Câu trả lời:


34

Xin vui lòng đọc hướng dẫn .

ln -sfn /new/target /path/to/symlink

$ man ln

-n, --no-dereference
coi LINK_NAME như một tệp bình thường nếu đó là một liên kết tượng trưng đến một thư mục


1
Tại sao đây là câu trả lời đúng?
Ông trùm

1
@Mrchief Nếu /path/to/symlinkđã là một liên kết tượng trưng đến một thư mục, không có -ncờ, bạn sẽ nhận được liên kết tượng trưng được tạo /path/to/symlink/targetthay vì thay thế/path/to/symlink
Flimm

Lưu ý rằng trong macOS, điều này vẫn không hoạt động trong một số trường hợp, ví dụ, khi /path/to/symlinktồn tại và là một thư mục, nhưng không phải là một liên kết tượng trưng. Tôi nghĩ cách duy nhất để làm việc xung quanh nó là chạy rm -rftrước.
Flimm

78

Đây là mục đích của ln's -flựa chọn: nó loại bỏ các tập tin đích tồn tại, nếu có, trước khi tạo liên kết.

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

sẽ tạo liên kết tượng trưng /path/to/recent/filetrỏ tới /path/to/data/folder/month/date/hour/minute/file, thay thế bất kỳ tệp hiện có hoặc liên kết tượng trưng nào thành tệp nếu cần thiết (và hoạt động tốt nếu không có gì tồn tại ở đó).

Nếu một thư mục, hoặc liên kết tượng trưng đến một thư mục, đã tồn tại với tên đích, liên kết tượng trưng sẽ được tạo bên trong nó (vì vậy bạn sẽ kết thúc bằng /path/to/recent/file/fileví dụ trên). Các -ntùy chọn, có mặt tại một số phiên bản của ln, sẽ chăm sóc của liên kết tượng trưng đến thư mục cho bạn, thay thế chúng khi cần thiết:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIXln không chỉ định -nvì vậy bạn không thể dựa vào nó nói chung. Phần lớn lnhành vi được xác định theo triển khai, do đó bạn thực sự cần kiểm tra các chi tiết cụ thể của hệ thống bạn đang sử dụng. Nếu bạn đang sử dụng GNUln , bạn cũng có thể sử dụng các tùy chọn -t-T, để làm cho hành vi của nó hoàn toàn có thể dự đoán được khi có các thư mục ( nghĩa là thất bại thay vì tạo liên kết bên trong thư mục hiện có cùng tên).

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.