28

Может кто-нибудь сказать мне, если это возможно, труба это без необходимости создавать физический файл где-нибудь между A и B.tar.gz?

Вот что я пытаюсь сделать:

  1. Файл А
  2. Переименовать А в Б
  3. Tar B.tar
  4. gzip -9 B.tar.gz

Так, например:

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

3 ответа3

36

Следующие примеры могут быть использованы, чтобы избежать создания промежуточных файлов:

tar с gzip:

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

GZIP без смолы:

gzip -9c A > B.gz

tar без 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

6

Это зависит от вашей версии tar

Если у вас есть версия, которая поддерживает преобразования членов (--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

Однако, если вы сжимаете только один файл, почему бы не пропустить часть tar все вместе и просто сделать

cat A | gzip -9 > B.gz
0

Если вы используете cp для создания копии с другим именем / местоположением, просто укажите полное / окончательное имя пути, которое вы хотите при создании завершенного файла .gzip:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .