должностное лицо действия контрольной точки tar пишет в файл

Я хочу использовать tar и ssh для отправки файлов как части автоматизированных процессов на человечности 14.04. Я могу отправить файл следующим образом:

tar -c  large_test_file_10MB.txt.tar.gz | ssh -q 172.16.200.211 'tar -x'

Но это не позволяет мне контролировать прогресс передачи. Мне удалось смолить файл и записать продвижение к stdout с командой ниже:

tar -czf large_test_file_10MB.txt.tar.gz large_test_file_10MB.txt --record-size=10K --checkpoint=100 --checkpoint-action=exec='echo $TAR_CHECKPOINT"0kiB"'; FROMSIZE=`du -sk large_test_file_10MB.txt | cut -f 1`; printf "%dkiB\n" $FROMSIZE

это производит следующий вывод:

1000kiB
2000kiB
3000kiB
4000kiB
5000kiB
6000kiB
7000kiB
8000kiB
9000kiB
9768kiB

Но это не позволяет мне передавать файл по каналу к ssh и просматривать прогресс одновременно. Если я изменяюсь - checkpoint-action=exec управляют от

echo $TAR_CHECKPOINT"0kiB"

кому:

echo $TAR_CHECKPOINT"0kiB" >> progress.txt

вывод просто изменяется на

1000kiB >> progress.txt
2000kiB >> progress.txt
3000kiB >> progress.txt
4000kiB >> progress.txt
5000kiB >> progress.txt
6000kiB >> progress.txt
7000kiB >> progress.txt
8000kiB >> progress.txt
9000kiB >> progress.txt
9768kiB >> progress.txt

как я могу добраться - checkpoint-action=exec управляют, чтобы скорее записать в файл, чем к stdout?

Я знаю, что мог возможно сделать это с инструментом, таким как объем плазмы, но я предпочту мочь выполнить команду, не устанавливая дополнительное программное обеспечение.

0
задан 20 November 2018 в 21:27

1 ответ

Из руководства это похоже tar не вызывает оболочку, но выполняет некоторое полевое разделение и расширение отдельно на exec аргумент. От раздела по Выполнению Внешних Команд:

Определенные операции tar GNU подразумевают рабочие внешние команды, которые Вы предоставляете на командной строке. Одна из таких операций отмечает контрольной точкой, описанный выше [...]

Каждый раз, когда такую операцию требуют, tar первые разделения предоставленная команда в слова во многом как оболочка делают. Это затем рассматривает первое слово как название программы или сценария оболочки для выполнения и остальная часть слов как ее параметры командной строки. Программа, если не дали как абсолютное имя файла, ищется в оболочке PATH.

Любая дополнительная информация обычно предоставляется к внешним командам в переменных среды, характерных для каждой конкретной операции. Например, --checkpoint-action=exec опция, определяет TAR_ARCHIVE переменная к названию архива, работать на. Вы, должен потребность быть, может использовать эти переменные в командной строке внешней команды.

Так, при необходимости в другом синтаксисе оболочки как перенаправление необходимо будет вызвать оболочку:

tar ...  --checkpoint-action=exec='sh -c "echo $TAR_CHECKPOINT"0kiB" >> progress.txt"'

(Нечетные работы заключения в кавычки: sh должен все еще получить единственную строку echo [...]0kiB > progress.txt как аргумент после -c.)

0
ответ дан 27 October 2019 в 02:41

Другие вопросы по тегам:

Похожие вопросы: