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.

  • Quale command Unix posso utilizzare per eseguire un limite di 100 file in una cartella?
  • La restrizione del command sudo in / etc / sudoers è protetta?
  • Identificare i file modificati in * nix webserver
  • Qual è l'IRCD più stabile?
  • PYTHONPATH variabile d'ambiente ... come faccio ad each subdirectory successivamente?
  • Come leggere il clientmqueue HUGE in formato umano?
  • 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 

  • hardlink di file word ms nascosto e non aggiornato
  • Hardlinks di un file
  • Ricalcolare gli ACL ereditati da Windows per i collegamenti duri
  • C'è un modo per creare una copia-su-scrittura di una directory?
  • Samba interrompe i legami duri - comportmento desiderato?
  • rsync con --hard-links si blocca
  • 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.