Làm cách nào để xóa mục tiêu của một liên kết tượng trưng mà không xóa chính liên kết đó?


10

Tôi có một liên kết tượng trưng ~/Desktop/test.txtmà chỉ đến ~/rendu/test.txt.

Tôi biết CHỈ đường dẫn của ~/Desktop/test.txt, tôi muốn một cách nhanh chóng để xóa mà ~/rendu/test.txtKHÔNG xóa liên kết tượng trưng.

Dành cho người muốn biết tại sao: Tôi có một tệp có tên crypted.xxxtrên máy tính để bàn, được mã hóa và chứa mật khẩu của tôi.

Khi tôi muốn cập nhật tệp được mã hóa, tôi giải mã nó và nó tạo crypted.txttrong một thư mục đặc biệt. Vì vậy, tôi tạo một liên kết đến tập tin đó trên máy tính để bàn của tôi vì lý do thực tế. Nhưng sau khi nhìn vào tôi crypted.txt, tôi muốn nhanh chóng xóa cái này crypted.txt(nhưng không phải là liên kết trong máy tính để bàn).


4
chờ đã, bạn muốn xóa tệp (như câu hỏi của bạn gợi ý) hoặc xóa nội dung của tệp (như tiêu đề sais)
Jacob Vlijm

Xóa tệp và giữ liên kết tượng trưng, ​​xin lỗi vì sự hiểu lầm
Ugo Hed

2
Có lẽ bạn có thể xem xét sử dụng một trình quản lý mật khẩu chuyên dụng thay thế? Keepass là khá tốt, ví dụ, và là trong repos.
evilsoup

Câu trả lời:


11

sử dụng findđể tìm symlink và sau đó sử dụng readlinkđể có được đường dẫn đầy đủ đến đích rm:

find ~/Desktop/ -type l -name 'test.txt' -exec bash -c 'rm "$(readlink -f "$1")"' _ {} \;

Hoặc như bạn đã biết tên liên kết đã có:

rm "$(readlink -f ~/Desktop/test.txt)"

4
Hãy cẩn thận với các liên kết tương đối mặc dù. Một liên kết tượng trưng tương đối được hiểu là liên quan đến thư mục mà nó được đặt. Nhưng rmlệnh của bạn sẽ diễn giải nó liên quan đến thư mục hiện tại của shell. Do đó, có khả năng lệnh đó sẽ xóa một tệp khác với những gì liên kết tượng trưng đang trỏ đến.
kasperd

5
@kasperd Với -f -ehoặc -mđường dẫn đầy đủ được trả về, ngay cả khi liên kết tượng trưng đích trỏ đến một đường dẫn tương đối, vì vậy, đó là điều đáng lo ngại trong trường hợp rm "$(readlink ~/Desktop/test.txt)", nhưng không phải khi sử dụng -f -ehoặc -m.
kos

@kos Bạn nói đúng. Trong trường hợp đó, bạn chỉ phải lo lắng nếu có thể có bất kỳ điều kiện chủng tộc.
kasperd

Ngoài ra, người ta có thể sử dụng realpath , trong trường hợp này cũng giống như readlink -f(nhưng cũng hoạt động nếu bản thân mục tiêu không phải là một liên kết).
leftaroundabout

6

Đơn giản chỉ cần sử dụng:

printf "" > "$(readlink '/path/to/link')"

để xóa tập tin, hoặc

rm "$(readlink '/path/to/link')"

để loại bỏ các tập tin.

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.