Quelqu'un peut-il me dire s'il est possible de pipe | cela sans avoir à créer un fichier physique entre A et B.tar.gz?
C'est ce que j'essaie de faire:
Donc par exemple:
cp A B | tar cvf - B | gzip -9 B.tar.gz
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) A
en B
premier n’a aucun sens pour moi. Si cela est prévu, mettez simplement un mv A B &&
avant l'une des commandes ci-dessus et échangez A
avec B
.
Exemple avec tar et gzip:
mv A B && tar cf - B | gzip -9 > B.tar.gz
Cela dépend de votre version de tar
Si vous avez la version qui prend en charge les transformations de membre (--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 simplement copier le fichier en premier, 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 à la fois et ne faire que
cat A | gzip -9 > B.gz
Si vous utilisez cp
pour créer une copie avec un nom/emplacement différent, incluez simplement le chemin complet/final souhaité lors de la création de votre fichier .gzip terminé:
tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz