Domanda

Ho un link simbolico a una directory importante. Voglio liberarmi di quel link simbolico, mantenendo la directory dietro di esso.

Ho provato rm e torno rm: impossibile rimuovere 'foo' .
Ho provato rmdir e sono tornato rmdir: impossibile rimuovere "pippo": directory non vuota
Sono quindi passato a rm -f , rm -rf e sudo rm -rf

Quindi sono andato a cercare i miei backup.

C'è un modo per sbarazzarsi del collegamento simbolico senza buttare via il bambino con l'acqua del bagno?

È stato utile?

Soluzione

# this works
rm foo
# versus
rm foo/

Fondamentalmente, devi dirgli di eliminare un file, non di eliminare una directory. Credo che la differenza tra rm e rmdir esista a causa delle differenze nel modo in cui la libreria C tratta ciascuno.

In ogni caso, il primo dovrebbe funzionare, mentre il secondo dovrebbe lamentarsi di essere una directory.

Se non funziona come sopra, controlla le tue autorizzazioni. Per rimuovere i file è necessario il permesso di scrittura nella directory contenente.

Altri suggerimenti

usa " unlink " comando e assicurati che non abbia il / alla fine

$ unlink mySymLink
  

unlink () elimina un nome dal file system. Se quel nome era l'ultimo collegamento a un file e nessun processo ha il file aperto, il file viene eliminato e lo spazio che stava utilizzando viene reso disponibile per il riutilizzo.   Se il nome era l'ultimo collegamento a un file ma tutti i processi hanno ancora il file aperto, il file rimarrà in vigore fino alla chiusura dell'ultimo descrittore di file che fa riferimento a esso.

Penso che questo possa essere problematico se lo sto leggendo correttamente.

  

Se il nome fa riferimento a un collegamento simbolico, il collegamento viene rimosso.

     

Se il nome si riferiva a un socket, a quo o dispositivo, il nome viene rimosso ma i processi che hanno l'oggetto aperto possono continuare a usarlo.

https://linux.die.net/man/2/unlink

rm dovrebbe rimuovere il collegamento simbolico.

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$ 

Usa rm symlinkname ma non includere una barra alla fine (non usare: rm symlinkname / ). Ti verrà quindi chiesto se desideri rimuovere il link simbolico, y per rispondere sì.

Supponendo che in realtà sia un collegamento simbolico,

$ rm -d symlink

Dovrebbe capirlo, ma dal momento che non è possibile abilitare il codice latente che era destinato a un altro caso che non esiste più ma capita di fare la cosa giusta qui.

Se rm non è in grado di rimuovere un collegamento simbolico, forse è necessario esaminare le autorizzazioni sulla directory che contiene il collegamento simbolico. Per rimuovere le voci della directory, devi disporre dell'autorizzazione di scrittura sulla directory contenente.

Supponendo che la tua configurazione sia qualcosa del tipo: ln -s / mnt / bar ~ / foo , dovresti essere in grado di fare un rm foo senza problemi. Se non ci riesci, assicurati di essere il proprietario del foo e di avere il permesso di scrivere / eseguire il file. La rimozione di foo non toccherà bar , a meno che non lo faccia ricorsivamente.

Su CentOS, esegui semplicemente rm linkname e ti verrà chiesto di " rimuovere il link simbolico? " ;. Digita Y e Invio , il collegamento sparirà e la directory sarà sicura.

Ho avuto questo problema con MinGW (in realtà Git Bash) in esecuzione su un server Windows. Nessuno dei suggerimenti di cui sopra sembrava funzionare. Alla fine è stata creata una copia della directory nel caso in cui sia stato eliminato il collegamento software in Esplora risorse, quindi è stato eliminato l'elemento nel Cestino. Emetteva rumori come se stesse cancellando i file ma non lo faceva. Fai un backup però!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top