Eu criei um script que fará isso. O script converte todos os hard-links que encontrar em um diretório de origem (primeiro argumento) que são os mesmos que no diretório de trabalho (segundo argumento opcional) em links simbólicos:
Tem uma opção -n para um dry-run, que não faz nada além de mostrar o que seria feito.
Parte principal:
$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 %p\n" | \
while read working_inode working_on
do
find "$SOURCE_DIR" -type f -links +1 -printf "%i %p\n" | sort -nk1 | \
while read inode file
do
if [[ $inode == $working_inode ]]; then
ln -vsf "$file" "$working_on"
fi
done
done
Os -links +1 - > Vai encontrar todos os arquivos que possuem mais de um link. Os arquivos com link físico têm uma contagem de links de pelo menos dois.