Jak usunąć cel dowiązania symbolicznego bez usuwania samego łącza?


10

Mam symboliczny link, ~/Desktop/test.txtktóry wskazuje ~/rendu/test.txt.

Znam TYLKO ścieżkę ~/Desktop/test.txt, chcę szybkiego sposobu usunięcia ~/rendu/test.txtBEZ usuwania linku symbolicznego.

Dla tego, kto chce wiedzieć, dlaczego: Mam plik o nazwie crypted.xxxna pulpicie, który jest zaszyfrowany i zawiera moje hasło.

Kiedy chcę zaktualizować zaszyfrowany plik, odszyfrowuję go i tworzę crypted.txtw specjalnym katalogu. Dlatego ze względów praktycznych robię link do tego pliku na pulpicie. Ale po obejrzeniu mojego crypted.txt, chcę to szybko usunąć crypted.txt(ale nie link na pulpicie).


4
poczekaj, chcesz usunąć plik (jak sugeruje twoje pytanie) lub usunąć zawartość pliku (jak w tytule sais)
— Jacob Vlijm

Usuń plik i zachowaj symboliczny link, przepraszamy za nieporozumienia
— Ugo Hed,

2
Może zamiast tego możesz rozważyć użycie dedykowanego menedżera haseł? Keepass jest na przykład całkiem niezły i znajduje się w repozytorium.
— evilsoup

Odpowiedzi:


11

za pomocą, findaby znaleźć dowiązanie symboliczne, a następnie za pomocą, readlinkaby uzyskać pełną ścieżkę do celu, aby rm:

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

Lub jak już znasz nazwę linku:

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

4
Uważaj jednak na linki względne. Względne dowiązanie symboliczne jest interpretowane jako odniesienie do katalogu, w którym się znajduje. Ale twoje rmpolecenie zinterpretuje to jako odniesienie do bieżącego katalogu powłoki. Dlatego istnieje możliwość, że to polecenie usunie inny plik niż ten, na który wskazywał dowiązanie symboliczne.
— kasperd

5
@kasperd With -f -elub -mpełna ścieżka jest zwracana, nawet jeśli docelowy dowiązanie symboliczne wskazuje ścieżkę względną, więc tak, jest to problem w przypadku rm "$(readlink ~/Desktop/test.txt)", ale nie w przypadku użycia -f -elub -m.
— Kos

@kos Masz rację. W takim przypadku musisz się tylko martwić, czy mogą wystąpić jakiekolwiek warunki wyścigu.
— kasperd,

Alternatywnie można użyć realpath , co w tym przypadku robi to samo co readlink -f(ale działa również, jeśli sam cel nie jest linkiem).
— lewo wokół około

6

Po prostu użyj:

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

aby wyczyścić plik, lub

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

aby usunąć plik.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.