Come posso eliminare la destinazione di un collegamento simbolico senza eliminare il collegamento stesso?


10

Ho un collegamento simbolico ~/Desktop/test.txtche indica ~/rendu/test.txt.

Conosco SOLO il percorso di ~/Desktop/test.txt, voglio un modo rapido per eliminare ~/rendu/test.txtSENZA eliminare il collegamento simbolico.

Per chi vuole sapere perché: ho un file chiamato crypted.xxxsul mio desktop, che è crittografato e contiene la mia password.

Quando voglio aggiornare il mio file crittografato, lo decrittografo e lo crea crypted.txtin una directory speciale. Quindi faccio un collegamento a quel file sul mio desktop per motivi pratici. Ma dopo aver visto il mio crypted.txt, voglio eliminare rapidamente questo crypted.txt(ma non il link sul desktop).


4
aspetta, vuoi eliminare il file (come suggerisce la tua domanda) o eliminare il contenuto del file (come dice il titolo)
Jacob Vlijm

Elimina il file e mantieni il link simbolico, scusami per l'incomprensione
Ugo Hed

2
Forse potresti prendere in considerazione l'utilizzo di un gestore di password dedicato? Keepass è abbastanza buono, per esempio, ed è nei repository.
evilsoup,

Risposte:


11

usando findper trovare il link simbolico e poi usando readlinkper ottenere il percorso completo verso la destinazione per rm:

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

O come già conosci il nome del link:

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

4
Fai attenzione con i collegamenti relativi però. Un collegamento simbolico relativo viene interpretato come relativo alla directory in cui si trova. Ma il rmcomando lo interpreterà come relativo alla directory corrente della shell. Quindi esiste la possibilità per quel comando di eliminare un file diverso da quello a cui puntava il collegamento simbolico.
Kasperd,

5
@kasperd Viene restituito con -f -eo -mil percorso completo, anche se il collegamento simbolico di destinazione punta a un percorso relativo, quindi sì, è un problema in caso di rm "$(readlink ~/Desktop/test.txt)", ma non quando si utilizza -f -eo -m.
kos,

@kos Hai ragione. In quel caso devi solo preoccuparti se ci potrebbero essere condizioni di gara.
Kasperd,

In alternativa, si può usare realpath , che in questo caso fa la stessa cosa di readlink -f(ma funziona anche se l'obiettivo stesso non è un collegamento).
leftaroundabout

6

Usa semplicemente:

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

per cancellare il file, o

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

per rimuovere il file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.