Ho un sottofilesystem completo all'interno di un percorso /home/user/system contenente la struttura standard di Linux con le directory /bin , /home , /root , /usr , /var , /etc ,...
 Questo sottofilesystem contiene collegamenti simbolici, relativi o assoluti. I relativi collegamenti simbolici vanno bene, rimangono all'interno del sottofilesystem sotto /home/user/system . Ma i collegamenti simbolici assoluti sono problematici, poiché puntano a un obiettivo al di fuori del sottofilesystem.
Ad esempio, assumiamo un collegamento simbolico assoluto come segue (visto all'interno del sottofilesystem):
/usr/file1 -> /usr/lib/file1
 Nel filesystem generale abbiamo un collegamento a /home/user/system/usr/file1 che ora puntano a un file /usr/lib/file1 al di fuori del sottofilesystem, invece di un file /home/user/system/usr/lib/file1 dentro il sottofilesystem.
Vorrei avere uno script semplice, preferibilmente una singola riga di comando (rsync, chroot, find, ...) che converta ogni collegamento simbolico assoluto in uno relativo.
Nell'esempio fornito, quel collegamento relativo diventerebbe
/usr/file1 -> ../usr/lib/file1
Risposta accettata:
 Con i symlinks utility di Mark Lord (offerto da molte distribuzioni; se il tuo non ce l'ha, compilalo dal sorgente):
chroot /home/user/system symlinks -cr .
 In alternativa, su sistemi che hanno un readlink comando e un -lname predicato da find (attenzione:codice non testato):
cd /home/user/system &&
find . -lname '/*' -exec ksh -c '
  for link; do
    target=$(readlink "$link")
    link=${link#./}
    root=${link//+([!/])/..}; root=${root#/}; root=${root%..}
    rm "$link"
    ln -s "$root${target#/}" "$link"
  done
' _ {} +