как преобразовать многострочные команды Linux в одну строку команд - PullRequest
2 голосов
/ 31 октября 2011

Может кто-нибудь объяснить, пожалуйста, как использовать ">" и "|"в Linux команды и преобразовать эти три строки в одну строку кода, пожалуйста?

mysqldump --user=*** --password=*** $db --single-transaction -R > ${db}-$(date +%m-%d-%y).sql
tar -cf ${db}-$(date +%m-%d-%y).sql.tar ${db}-$(date +%m-%d-%y).sql
gzip ${db}-$(date +%m-%d-%y).sql.tar
rm ${db}-$(date +%m-%d-%y).sql (after conversion I guess this line will be useless)

Ответы [ 4 ]

2 голосов
/ 31 октября 2011

Я не вижу смысла в использовании tar: у вас есть только один файл, и для сжатия вы вызываете gzip явным образом.Tar используется для архивирования / упаковки нескольких файлов в один.

Ваша команда должна быть (команда дампа закорочена, но я думаю, вы получите ее):

mysqldump .... | gzip > filename.sql.gz
2 голосов
/ 31 октября 2011

Вы можете использовать следующий скрипт:

#!/bin/sh
USER="***"
PASS="***"
DB="***"

mysqldump --user=$USER --password=$PASS $DB --single-transaction -R | gzip > ${DB}-$(date +%m-%d-%y).sql.gz

Вы можете узнать больше о "|" здесь - http://en.wikipedia.org/wiki/Pipeline_(Unix). Я могу сказать, что эта конструкция перемещает вывод команды mysqldump на стандартный ввод команды gzip, так что вы соединяете вывод одной команды со входом другой через конвейер.

2 голосов
/ 31 октября 2011

Программа GNU tar сама может выполнить сжатие, обычно выполняемое gzip. Вы можете использовать флаг -z, чтобы включить это. Таким образом, tar и gzip могут быть объединены в:

tar -zcf ${db}-$(date +%m-%d-%y).sql.tar.gz ${db}-$(date +%m-%d-%y).sql

Получение tar для чтения из стандартного ввода для архивирования не простая задача, но я бы поставил под сомнение ее необходимость в этом конкретном случае.

Цель tar в том, чтобы иметь возможность упаковать множество файлов в один архивный файл, но, поскольку вы обрабатываете только один файл (поток вывода из mysqldump), вы не нужно до tar, вы можете просто направить его прямо в gzip:

mysqldump blah blah | gzip > ${db}-$(date +%m-%d-%y).sql.gz

Это потому, что gzip будет сжимать стандартный ввод в стандартный вывод, если вы не дадите ему никаких имен файлов.

Это устраняет необходимость в любых (возможно, очень больших) временных файлах во время процесса сжатия.

0 голосов
/ 31 октября 2011

Чтобы добавить команды в одну строку, я бы поставил && между ними.Таким образом, если кто-то терпит неудачу, он перестает их выполнять.Вы также можете использовать точку с запятой после каждой команды, и в этом случае каждая из них будет выполняться независимо от того, сбоит предыдущая команда или нет.

Вы также должны знать, что tar сделает для вас gzip с опцией "z"так что вам не нужна дополнительная команда.

Paxdiablo замечает, что вы можете просто направить mysqldump прямо в gzip.

...