Я думаю, вы ищете shar
, который создает архив оболочки (сценарий оболочки, который при запуске создает заданную иерархию каталогов).Он доступен в большинстве систем;вы можете использовать GNU sharutils , если у вас его еще нет.
Обычное использование для упаковки дерева каталогов будет выглядеть примерно так:
shar `find somedirectory -print` > archive.sh
Если вывы используете GNU sharutils и хотите создать «ванильные» архивы, которые используют только самые переносимые встроенные оболочки, mkdir
и sed
, тогда вы должны вызывать его как shar -V
.Вы можете удалить дополнительный багаж из сценариев, используя -xQ
;-x
для удаления проверок для существующих файлов и -Q
для удаления подробных выводов из архива.
shar -VxQ `find somedir -print` > archive.sh
Если вы действительно хотите что-то еще более простое, вот простая версия shar
какскрипт оболочки.Он требует имен файлов на стандартном вводе вместо аргументов для простоты и чтобы быть немного более надежным.
#!/bin/sh
while read filename
do
if test -d $filename
then
echo "mkdir -p '$filename'"
else
echo "sed 's/^X//' <<EOF > '$filename'"
sed 's/^/X/' < "$filename"
echo 'EOF'
fi
done
Вызывать как:
find somedir -print | simpleshar > archive.sh
Вам все равно нужно вызвать sed
, так каквам нужен какой-то способ убедиться, что строки в документе здесь не начинаются с разделителя, который закрывал бы документ и приводил к тому, что последующие строки интерпретировались как часть сценария.Я не могу придумать какой-либо действительно хороший способ решить проблему цитирования, используя только встроенные функции оболочки, поэтому вам придется полагаться на sed
(что является стандартом в любой Unix-подобной системе и былопрактически навсегда).