Howto pipe: cp | tar | gzip senza creare file intermedi?


31

Qualcuno può dirmi se è possibile eseguire il pipe | questo senza dover creare un file fisico ovunque tra A e B.tar.gz?

Questo è quello che sto cercando di fare:

  1. File A
  2. Rinomina da A a B
  3. Tar B.tar
  4. gzip -9 B.tar.gz

Quindi per esempio:

cp A B | tar cvf - B | gzip -9 B.tar.gz
gzip  pipe  tar 

perché vorresti pipe cp A B?
Dor

1
rinominare è mv.
Karoly Horvath,

3
Si prega di spiegare il motivo per cui si desidera copiare Aper Bprima.
speakr,

Risposte:


42

I seguenti esempi possono essere utilizzati per evitare la creazione di file intermedi:

catrame con gzip:

tar cf - A | gzip -9 > B.tar.gz

gzip senza catrame:

gzip -9c A > B.gz

tar senza gzip:

tar cf B.tar A

Rinominare (spostarsi) Aper Bprimo non ha senso per me. Se questo è previsto, inserisci semplicemente mv A B &&uno dei comandi sopra e scambialo Acon Besso.

Esempio con tar e gzip:

mv A B && tar cf - B | gzip -9 > B.tar.gz


1
Questo è corretto e dovrebbe essere contrassegnato come tale. È necessario includere un "-" dopo "tar" per l'opzione "piped", altrimenti si ottiene "tar: Cowardly rifiuta di creare un archivio vuoto".
Adambean,

6

Dipende dalla tua versione di tar

Se hai la versione che supporta le trasformazioni dei membri (--transform o --xform), puoi semplicemente farlo

tar -c --transform=s/A/B/ A | gzip -9 > B.tar.gz

il | gzip -9> B.tar.gz può essere evitato se tar supporta l'opzione -z

tar -zcvf B.tar.gz --transform=s/A/B/ A

Se la tua versione di tar non supporta --transform, dovrai prima copiare il file, ad es

 cp A B && tar -zcvf B.tar.gz B

Tuttavia, se stai comprimendo un solo file, perché non saltare la parte tar tutti insieme e basta

cat A | gzip -9 > B.gz

Ho usato cp come hai fatto nel tuo esempio, ma rinominare è mv

0

Se si sta utilizzando cpuna copia con un nome / percorso diverso, includere semplicemente il percorso completo / finale desiderato durante la creazione del file .gzip completato:

tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz

Questo non funziona, produce "tar: Cowardly rifiuta di creare un archivio vuoto".
Adambean,

@Adambean Forse vuoi usare tar -czf - some-folder > some-archive.tar.gz?
tsauerwein,

1
@tsauerwein, sì, vedi la mia risposta alla risposta qui sotto di 14 mesi fa ...
Adambean
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.