Howto труба: cp | дьоготь | gzip без створення посередницьких файлів?


31

Хто-небудь може сказати мені, чи можна трубу | це не потрібно створювати фізичний файл де-небудь між A і B.tar.gz?

Це те, що я намагаюся зробити:

  1. Файл A
  2. Перейменуйте від A до B
  3. Тар Б.тар
  4. gzip -9 B.tar.gz

Так, наприклад:

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

чому ви хочете труби cp A B?
Дор

1
перейменувати mv.
Каролі Горват

3
Будь ласка , поясніть , чому ви хотіли б скопіювати Aв Bперший.
лектор

Відповіді:


42

Для уникнення створення посередницьких файлів можна використовувати такі приклади:

дьоготь з gzip:

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

gzip без дьогтю:

gzip -9c A > B.gz

дьоготь без gzip:

tar cf B.tar A

Перейменування (переміщення) Aна Bперше для мене не має сенсу. Якщо це призначено, то просто поставте а mv A B &&перед будь-якою з перерахованих вище команд і обміняйтеся Aз Bнею.

Приклад з tar і gzip:

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


1
Це правильно і має бути позначене як таке. Ви повинні включити "-" після "tar" для опції трубопроводу, інакше ви отримаєте "tar: боягуз відмовляється створити порожній архів".
Адамбій

6

Це залежить від вашої версії дьогтю

Якщо у вас є версія, яка підтримує перетворення членів (--transform або --xform), ви можете просто зробити

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

| gzip -9> B.tar.gz можна уникнути, якщо ваш tar підтримує опцію -z

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

Якщо ваша версія tar не підтримує --transform, вам доведеться спочатку скопіювати файл, наприклад

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

Однак якщо ви стискаєте лише один файл, чому б не пропустити частину дьогтю всі разом і просто зробити

cat A | gzip -9 > B.gz

Я використовував cp, як ви робили у своєму прикладі, але перейменуйте mv

0

Якщо ви використовуєте cpдля створення копії з іншим ім’ям / місцеположенням, просто введіть повне / кінцеве ім'я шляху, яке ви хочете під час створення завершеного файлу .gzip:

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

Це не спрацьовує, виробляє "дьоготь: боягузлива відмова від створення порожнього архіву".
Адамбей

@Adambean Можливо, ви хочете використовувати tar -czf - some-folder > some-archive.tar.gz?
tsauerwein

1
@tsauerwein, так, дивіться мою відповідь на відповідь нижче від 14 місяців тому ...
Adambean
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.