C'è un modo per controllare se ci sono i link simbolico che punta a una directory?

StackOverflow https://stackoverflow.com/questions/100170

  •  01-07-2019
  •  | 
  •  

Domanda

Ho una cartella sul mio server che ho avuto un certo numero di collegamenti simbolici di puntamento.Allora ho creato una nuova cartella e voglio cambiare tutti i link simbolici a punto per la nuova cartella.Avevo considerato di sostituire la cartella originale con un link simbolico alla cartella nuova, ma sembra che se avessi continuato con la pratica che si potrebbe ottenere molto disordinato molto veloce.

Quello che ho fatto è stato cambiare manualmente i collegamenti simbolici a punto per la nuova cartella, ma mi hanno perso un paio.

C'è un modo per controllare se ci sono dei link simbolici che punta a una cartella particolare?

È stato utile?

Soluzione

Mi piacerebbe utilizzare il comando trova.

find . -lname /particular/folder

Che modo ricorsivo ricerca directory corrente per i collegamenti simbolici per /particular/folder.Nota che sarà solo trovare assoluta dei link simbolici.Un simile comando può essere usato per la ricerca di tutti i symlink che puntano a oggetti chiamati "cartella":

find . -lname '*folder'

Da qui è necessario eliminare eventuali falsi positivi.

Altri suggerimenti

È possibile controllare i collegamenti con il symlinks programma scritto da Marco Signore, sarà la scansione di un intero filesystem, normalizzare symlink percorsi a forma assoluta e la loro stampa su stdout.

Non c'è proprio alcun modo diretto per controllare questo tipo di collegamenti simbolici.Prendere in considerazione che si potrebbe avere un filesystem che non è montato tutto il tempo (es.un'unità USB esterna), che potrebbe contenere dei link simbolici ad un altro volume sul sistema.

Si potrebbe fare qualcosa con:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

Faccio notare che di FreeBSD find non supporta il -lname opzione, che è il motivo per cui ho finito con il sopra.

find . -type l -printf '%p -> %l\n'

Oltre a guardare tutte le altre cartelle se ci sono link che puntano alla cartella originale, non credo sia possibile.Se si, sarei interessato.

find / -lname 'fullyqualifiedpathoffile'
find /foldername -type l -exec ls -lad {} \;

Per i fisici, è possibile ottenere l'inode della directory con uno dei "ls" opzioni (-i, Credo).

Poi un find con -inum consentirà di trovare tutti i comuni hardlink.

Per softlinks, si può fare un ls -l su tutti i file alla ricerca per il testo dopo "->" e la normalizzazione di esso per assicurarsi che sia un percorso assoluto.

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