Як видалити ціль символічного посилання, не видаляючи саме посилання?


10

У мене є символічне посилання, на ~/Desktop/test.txtяке вказує ~/rendu/test.txt.

Я знаю ТІЛЬКИ шлях ~/Desktop/test.txt, я хочу швидкий спосіб видалити ~/rendu/test.txtБЕЗ видалення символічного посилання.

Для того, хто хоче знати, чому: У мене crypted.xxxна робочому столі є ім’я , який зашифрований і містить мій пароль.

Коли я хочу оновити зашифрований файл, я його розшифровую, і він створюється crypted.txtв спеціальному каталозі. Тому я роблю посилання на цей файл на робочому столі з практичних причин. Але подивившись на своє crypted.txt, я хочу швидко видалити це crypted.txt(але не посилання на робочому столі).


4
зачекайте, ви хочете видалити файл (як підказує ваше запитання) або видалити вміст файлу (як заголовок заголовок)
Jacob Vlijm

Видаліть файл і збережіть символічне посилання, вибачте за непорозуміння
Ugo Hed

2
Можливо, ви могли б замість цього використовувати спеціальний менеджер паролів? Наприклад, Keepass досить хороший і знаходиться в репості.
evilsoup

Відповіді:


11

за допомогою findзнаходження посилання, а потім за допомогою readlinkповного шляху до цілі rm:

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

Або як ви вже знаєте ім'я посилання:

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

4
Будьте обережні, але відносні посилання. Відносна символьна посилання інтерпретується як відносна каталогу, в якій вона знаходиться. Але ваша rmкоманда буде інтерпретувати її як відносну до поточного каталогу оболонки. Отже, є можливість для цієї команди видалити інший файл із того, на що вказувала символічне посилання.
kasperd

5
@kasperd З -f -eабо -mповертається повний шлях, навіть якщо цільове символьне посилання вказує на відносний шлях, так що так, це викликає занепокоєння у випадку rm "$(readlink ~/Desktop/test.txt)", але не при використанні -f -eабо -m.
kos

@kos Ви маєте рацію. У такому випадку вам потрібно хвилюватися лише в тому випадку, якщо можуть бути якісь умови гонки.
kasperd

Крім того, можна використовувати realpath , що робить у цьому випадку те саме, що і readlink -f(але також працює, якщо сама ціль не є ланкою).
близько

6

Просто використовуйте:

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

щоб очистити файл, або

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

щоб видалити файл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.