2012-07-12 8 views
6

Ho una serie di directory su Linux e ogni directory contiene molti file e dati. I dati in queste directory vengono generati automaticamente, ma più utenti dovranno eseguire più analisi su tali dati e generare più file, modificare la struttura, ecc.Come creare una copia di una directory su Linux con i collegamenti

Poiché queste directory di dati sono molto grandi, non voglio più persone per fare una copia dei dati originali quindi vorrei fare una copia della directory e collegarmi all'originale da quella nuova. Tuttavia, mi piacerebbe che eventuali modifiche vengano mantenute solo nella nuova directory e lascino solo la lettura originale. Preferirei non collegare solo i file specifici che definisco perché i dati in queste directory sono così vari.

Quindi mi chiedo se esiste un modo per creare una copia di una directory collegandosi all'originale mantenendo solo i file modificati nella nuova directory.

risposta

21

Si scopre questo è quello che volevo:

cp -al <origdir> <newdir> 

Sarà copiare un'intera directory e creare hard link ai file originali. Se il file originale viene eliminato, il file copiato esiste ancora e viceversa. Questo funzionerà perfettamente, ma ho trovato che newdir non deve esistere già. Finché i file originali sono di sola lettura, sarai in grado di creare una copia identica e sicura della directory originale.

+1

È possibile eseguire questa operazione quando i file originali non sono di sola lettura, ma tutte le modifiche apportate a entrambe le copie verranno eseguite su entrambe le copie in modo uguale, quindi l'hard linking non è adatto se si desidera essere in grado di modificare il file copiato senza modificare l'originale. – thomasrutter

2

Tuttavia, dal momento che si sta cercando un modo in cui le persone possono riscrivere le modifiche, UnionFS è probabilmente quello che si sta cercando. Fornisce mezzi per combinare posizioni di sola lettura e di lettura-scrittura in uno.

Unionfs consente qualsiasi combinazione di rami di sola lettura e di lettura/scrittura, nonché l'inserimento e la cancellazione di rami in qualsiasi punto del fan-out.


Originariamente stavo andando a raccomandare questo (lo uso molto):

Supponendo le autorizzazioni non sono un problema (ad esempio solo la lettura è necessario) Vorrei suggerire di legare-mount li al loro posto.

mount -B <original> <new-location> 
# or 
mount --bind <original> <new-location> 

<new-location> deve esistere come una cartella.

+0

Grazie per i suggerimenti! Ho provato il mount bind e sono riuscito a creare un nuovo punto di mount. Tuttavia: 1) Ho migliaia di directory, che richiederebbero migliaia di montaggi 2) Ho creato un file nella nuova directory e si è anche mostrato nella directory originale –

+0

Migliaia di directory ma non una sola radice che potrebbe essere utilizzata ? Avresti bisogno al massimo di tante cavalcature come utenti in uno scenario del genere. Anche se utenti diversi hanno sottocartelle diverse di quella singola radice comune, il numero di montature sarebbe uguale al numero di utenti. – 0xC0000022L

+0

Un albero duplicato è possibile ... ma cambiare le cose a livello di SO non è l'ideale. Penso che potrei provare solo ricorsivamente a creare collegamenti a file e directory nell'originale, e semplicemente assicurarmi che i file originali siano di sola lettura –