Howto pipe: cp | smoła | gzip bez tworzenia plików pośrednich?

31

Czy ktoś może mi powiedzieć, czy możliwe jest | to bez konieczności tworzenia fizycznego pliku pomiędzy A i B.tar.gz?

Oto co próbuję zrobić:

  1. Plik a
  2. Zmień nazwę z A na B
  3. Tar B.tar
  4. gzip -9 B.tar.gz

Na przykład:

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

źródło
dlaczego chciałbyś fajkować cp A B?
Dor
1
zmiana nazwy to mv.
Karoly Horvath,
3
Proszę wyjaśnić, dlaczego chcesz skopiować Ado Bpierwszego.
przemawiający

Odpowiedzi:

42

Aby uniknąć tworzenia plików pośrednich, można użyć następujących przykładów:

smoła z gzip:

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

gzip bez tar:

gzip -9c A > B.gz

smoła bez gzipa:

tar cf B.tar A

Zmiana nazwy (przeniesienie) Ana Bpierwszą nie ma dla mnie sensu. Jeśli jest to zamierzone, po prostu umieść mv A B &&przed jednym z powyższych poleceń i wymień Az Bnim.

Przykład z tar i gzip:

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

mówca
źródło
1
Jest to poprawne i powinno być oznaczone jako takie. Musisz podać „-” po „tar” dla opcji potokowej, w przeciwnym razie pojawi się „tar: Tchórzliwie odmawia utworzenia pustego archiwum”.
Adambean
6

To zależy od twojej wersji tar

Jeśli masz wersję obsługującą transformacje składowe (--transform lub --xform), możesz po prostu to zrobić

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

| gzip -9> B.tar.gz można uniknąć, jeśli tar obsługuje opcję -z

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

Jeśli twoja wersja tar nie obsługuje --transform, musisz najpierw skopiować plik np

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

Jeśli jednak kompresujesz tylko jeden plik, możesz pominąć część tar razem i po prostu zrobić

cat A | gzip -9 > B.gz
Bob Vale
źródło
Użyłem cp, tak jak w twoim przykładzie, ale zmieniłem nazwę na mv
0

Jeśli używasz cpdo wykonania kopii o innej nazwie / lokalizacji, po prostu podaj pełną / końcową nazwę ścieżki, którą chcesz utworzyć podczas tworzenia ukończonego pliku .gzip:

tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz
Gość
źródło
To nie działa, powoduje „tar: Tchórzliwy odmowa utworzenia pustego archiwum”.
Adambean
@Adambean Może chcesz użyć tar -czf - some-folder > some-archive.tar.gz?
tsauerwein,
1
@tsauerwein, tak, zobacz moją odpowiedź na poniższą odpowiedź sprzed 14 miesięcy ...
Adambean,