Guide pratique: cp | goudron | gzip sans créer de fichiers intermédiaires?

31

Quelqu'un peut-il me dire s'il est possible de canaliser | cela sans avoir à créer un fichier physique n'importe où entre A et B.tar.gz?

Voici ce que j'essaie de faire:

  1. Déposer un
  2. Renommez A en B
  3. Tar B.tar
  4. gzip -9 B.tar.gz

Ainsi, par exemple:

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

la source
pourquoi voudriez-vous jouer cp A B?
Dor
1
renommer est mv.
Karoly Horvath
3
Veuillez expliquer pourquoi vous souhaitez copier Aen Bpremier.
speakr

Réponses:

42

Les exemples suivants peuvent être utilisés pour éviter de créer des fichiers intermédiaires:

goudron avec gzip:

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

gzip sans goudron:

gzip -9c A > B.gz

goudron sans gzip:

tar cf B.tar A

Renommer (déplacer) Aen Bpremier n'a pas de sens pour moi. Si cela est prévu, mettez simplement un mv A B &&avant l'une des commandes ci-dessus et échangez Aavec Blà.

Exemple avec tar et gzip:

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

speakr
la source
1
Ceci est correct et doit être marqué comme tel. Vous devez inclure un "-" après "tar" pour l'option canalisée sinon vous obtenez "tar: Lâche refusant de créer une archive vide".
Adambean
6

Cela dépend de votre version de tar

Si vous avez la version qui prend en charge les transformations de membres (--transform ou --xform), vous pouvez simplement faire

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

le | gzip -9> B.tar.gz peut être évité si votre tar prend en charge l'option -z

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

Si votre version de tar ne prend pas en charge --transform, vous devrez d'abord copier le fichier, par exemple

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

Cependant, si vous ne compressez qu'un fichier, pourquoi ne pas sauter la partie tar tous ensemble et faire

cat A | gzip -9 > B.gz
Bob Vale
la source
J'ai utilisé cp comme vous l'avez fait dans votre exemple, mais renommer est mv
0

Si vous utilisez cppour faire une copie avec un nom / emplacement différent, incluez simplement le chemin complet / final que vous souhaitez lors de la création de votre fichier .gzip terminé:

tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz
Client
la source
Cela ne fonctionne pas, produit "tar: refus lâche de créer une archive vide".
Adambean
@Adambean Peut-être voulez-vous utiliser tar -czf - some-folder > some-archive.tar.gz?
tsauerwein
1
@tsauerwein, oui, voir ma réponse à la réponse ci-dessous d'il y a 14 mois ...
Adambean