Interrompere tutti i collegamenti in una cartella

Ho una cartella che contiene un certo numero di file con collegamenti duri (nella stessa cartella o altrove) e desidero de-hardlink questi file, quindi diventano indipendenti e le modifiche al loro contenuto non influenzano altro file (il loro numero di collegamento diventa 1).

Di seguito, mi danno una soluzione che fondamentalmente copia each collegamento duro ad un'altra posizione, quindi spostare nuovamente sul posto.

  • Aggiungendo l'output a un file contemporaneamente troncando le linee N
  • sudo: come permettere un solo argomento a un command?
  • Avviare un nuovo server UNIX
  • In UNIX, come posso gatto un file situato in un altro server?
  • Linux Security / Sysadmin Corsi a Londra?
  • Spostare i file dal volume e riaccenderlo conservando tutti gli attributi?
  • Tuttavia questo metodo sembra piuttosto crudo e errato, quindi vorrei sapere se esiste un command che de-hardlink un file per me.

    Risposta brutale:

    Trova file con collegamenti duri ( Modifica : per trovare anche le prese, ecc. Che hanno collegamenti duri, usa find -not -type d -links +1 ):

     find -type f -links +1 

    Un metodo grezzo per disassemblare un file (copiarlo in un'altra posizione e spostarlo indietro): Modifica: come ha detto Celada, è meglio fare un cp -p sotto, per evitare di perdere i timestamp e le autorizzazioni. Modifica: Crea una directory temporanea e copia in un file sotto di esso, invece di sovrascrivere un file temp, minimizza il rischio di sovrascrivere alcuni dati, anche se il command mv è ancora rischioso (grazie @Tobu).

     # This is unhardlink.sh set -e for i in "$@"; do temp="$(mktemp -d ./hardlnk-XXXXXXXX)" [ -e "$temp" ] && cp -ip "$i" "$temp/tempcopy" && mv "$temp/tempcopy" "$i" && rmdir "$temp" done 

    Quindi, per disinserire tutti i collegamenti duri ( Modifica : cambiato- -type f a -not -type d , vedi sopra):

     find -not -type d -links +1 -print0 | xargs -0 unhardlink.sh 

  • Hardlinks di un file
  • come creare un collegamento simbolico (ln) tra due partizioni
  • Rsnapshot a più destinazioni (o per mantenere la struttura dei collegamenti duri)
  • Ricalcolare gli ACL ereditati da Windows per i collegamenti duri
  • rsync con --hard-links si blocca
  • Come funziona logrotate per interagire con i file legati?
  • 2 Solutions collect form web for “Interrompere tutti i collegamenti in una cartella”

    C'è spazio per il miglioramento dello script, ad esempio l'aggiunta di una opzione -p al command cp modo che le autorizzazioni ei timestamp verranno salvati nell'operazione di unhardlink e si potrebbe aggiungere un certo trattamento di errori in modo che il file temp venga eliminato in caso di un errore, ma l'idea di base della tua soluzione è l'unico che funziona. Per disallineare un file è necessario copiarlo e quindi spostare la copia sul nome originale. Non esiste una soluzione "less grezzo", e questa soluzione ha condizioni di gara nel caso in cui un altro process acceda al file contemporaneamente.

    Se si desidera masterizzare lo spazio su disco e si dispone di una versione relativamente moderna di tar (ad esempio, su Ubuntu 10.04 e CentOS 6), è ansible giocare con l'opzione --hard-dereference .

    Qualcosa di simile a:

     $ cd /path/to/directory $ ls -l * bar: total 12 -rw-rw-r-- 2 cjc cjc 2 May 6 19:07 1 -rw-rw-r-- 2 cjc cjc 2 May 6 19:07 2 -rw-rw-r-- 1 cjc cjc 2 May 6 19:07 3 foo: total 12 -rw-rw-r-- 2 cjc cjc 3 May 6 19:07 1 -rw-rw-r-- 2 cjc cjc 2 May 6 19:07 2 -rw-rw-r-- 1 cjc cjc 2 May 6 19:07 4 

    (where avevo eseguito ln foo/[12] bar )

     $ tar cvf /tmp/dereferencing.tar --hard-dereference . $ tar xvf /tmp/dereferencing.tar $ ls -l * bar: total 12 -rw-rw-r-- 1 cjc cjc 2 May 6 19:07 1 -rw-rw-r-- 1 cjc cjc 2 May 6 19:07 2 -rw-rw-r-- 1 cjc cjc 2 May 6 19:07 3 foo: total 12 -rw-rw-r-- 1 cjc cjc 3 May 6 19:07 1 -rw-rw-r-- 1 cjc cjc 2 May 6 19:07 2 -rw-rw-r-- 1 cjc cjc 2 May 6 19:07 4 

    Dalla pagina uomo:

      --hard-dereference follow hard links; archive and dump the files they refer to 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.