È facile convertire un collegamento simbolico in un collegamento reale con ln -f
(esempio)
Sarebbe anche facile convertire un hardlink (filenames link
e original
) torna a un collegamento simbolico a link->original
nel caso in cui conosci entrambi i file e definisci tu stesso quale è il "file originale". Potresti facilmente creare un semplice script convert-known-hardlink-to-symlink
ciò risulterebbe in qualcosa del tipo:
convert-known-hardlink-to-symlink link original
$ ls -li
3802465 lrwxrwxrwx 1 14 Dec 6 09:52 link -> original
3802269 -rw-rw-r-- 1 0 Dec 6 09:52 original
Ma sarebbe davvero utile se avessi uno script in cui potresti definire una directory di lavoro (predefinito ./
) e una directory di ricerca in cui cercare (predefinito /
) per i file con lo stesso inode e quindi convertire tutti quei collegamenti fisici in collegamenti simbolici.
Il risultato sarebbe che nella directory di lavoro definita tutti i file che sono collegamenti fisici vengono invece sostituiti con collegamenti simbolici al primo file trovato con lo stesso inode.
Un inizio sarebbe find . -type f -links +1 -printf "%i: %p (%n)n"
Risposta accettata:
Ho creato uno script che farà questo. Lo script converte tutti i collegamenti reali che trova in una directory di origine (primo argomento) che sono gli stessi della directory di lavoro (secondo argomento opzionale) in collegamenti simbolici:
https://gist.github.com/rubo77/7a9a83695a28412abbcd
Ha un'opzione -n per una prova a secco, che non fa altro che mostra cosa sarebbe stato fatto.
Parte principale:
$WORKING_DIR=./
#relative source directory from working directory:
$SOURCE_DIR=../otherdir/with/hard-links/with-the-same-inodes
# find all files in WORKING_DIR
cd "$WORKING_DIR"
find "." -type f -links +1 -printf "%i %pn" |
while read working_inode working_on
do
find "$SOURCE_DIR" -type f -links +1 -printf "%i %pn" | sort -nk1 |
while read inode file
do
if [[ $inode == $working_inode ]]; then
ln -vsf "$file" "$working_on"
fi
done
done
The -links +1 –> Troverà tutti i file che hanno PIÙ di 1 collegamento. I file con collegamento fisico hanno un numero di collegamenti di almeno due.