Я хочу использовать 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?
Я знаю, что мог возможно сделать это с инструментом, таким как объем плазмы, но я предпочту мочь выполнить команду, не устанавливая дополнительное программное обеспечение.
Из руководства это похоже 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
.)