Creazione di un archivio tar senza includere la directory principale quando i file sono archiviati in directory diverse


11

Ho i seguenti quattro file nel file system:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

Devo mettere quei file in un archivio tar, ma non voglio aggiungere directory. Il meglio che potevo inventare era:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

Questo non è ancora perfetto, perché ogni file nell'archivio è profondo due directory. Esiste un modo migliore? O devo semplicemente devo copiare s1, s2, r3e r5file in una directory e creare l'archivio con tar -czvf archive.tgz s1 s2 r3 r5?

Risposte:


17

È possibile utilizzare -Cpiù volte (passando da una directory all'altra):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Si noti che ogni -Copzione viene interpretata in relazione alla directory corrente in quel punto (oppure è possibile utilizzare solo percorsi assoluti).


11

Se hai un elenco di file in un file, o puoi generarli usando un comando, puoi usare un singolo comando tar GNU:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

La trasformazione mantiene ancora le directory, ma appiattisce completamente il layout. Quindi hai bisogno di un modo per filtrare le directory, quindi la necessità di un elenco di file.


8

È possibile aggiungere i file all'archivio uno alla volta:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

È possibile eseguire questo script per semplificare: per ogni percorso, eseguire tar rfcon la directory di base come valore per il -Cparametro e il nome file di base senza percorso da aggiungere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.