Необходимо использовать цикл. Это не повредилось бы tar
синтаксис командной строки, чтобы позволить нескольким -f
опции, но это потребовало бы, чтобы добавляющий код обработал несколько архивов в последовательности со всеми видами граничных условий (Что происходит, если архив в середине уродлив? Архивы могут использовать различные механизмы сжатия? У Вас могут быть несколько -C
опции (опция tar GNU извлечь к конкретному каталогу), также? Что относительно-K (опция tar GNU запуститься в определенном имени элемента)? …).
Одна возможность, избегающая a for
цикл должен установить и активировать AVFS, файловая система FUSE, которая обеспечивает прозрачный доступ к архивам. Каждый архив /path/to/archive
удваивается как каталог ~/.avfs/path/to/archive#
. Если Вы хотите соответствовать архивам подстановочным знакам, существует препятствие добавления этого #
к подстановочному соответствию; это может быть сделано в zsh.
mountavfs
cp -p ~/.avfs$PWD/{a,b}.tgz\#/* /destination
cp -p ~/.avfs/path/to/source/*.tgz(e\''REPLY=$REPLY\#'\')/* /destination
Едва ли (по крайней мере, к моему знанию).
Если Вы сделали, чтобы SystemV разработал init сценарии, Вы могли бы создать что-то вроде /etc/rc6.K00scriptname
и /etc/rc0.d/K00scriptname
, который должен быть выполнен до любого из других сценариев там.
Это обычно возможно, но зависит от системы init-сценариев, которую Вы имеете. Если бы Ваше распределение использовало последнюю версию OpenRC (как хинду делает), Вы могли бы вставить любые сценарии /etc/local.d/
, назовите их <something>.stop
и они были бы выполнены при завершении работы системы. Для более старых версий необходимо было бы вставить команды local_stop()
функция в /etc/conf.d/local
.
Порядок зависит от емкостно-резистивных параметров настройки системы, но обычно локальные сценарии являются последними, чтобы работать при запуске и сначала работать на завершении работы.
Если у Вас есть выскочка, можно поймать событие завершения работы и запустить скрипт, когда оно поймано.