Решение для программного генерирования сценария экспорта из иерархии каталогов - PullRequest
0 голосов
/ 24 августа 2010

У меня часто бывает следующий сценарий: чтобы воспроизвести ошибку для отчетов, я создаю небольшой пример проекта, иногда мульти-модульный проект maven. Таким образом, может существовать иерархия каталогов, и она обычно будет содержать несколько небольших текстовых файлов. Стандартной процедурой, конечно, было бы создать файл zip и отправить его. Но в некоторых списках рассылки вложения не разрешены, и поэтому я ищу способ автоматически создать сценарий установки, который я могу публиковать в таких списках рассылки.

По сути, я был бы рад только Unix-фреймворку, который создает операторы mkdir для создания каталогов и операторы >> для записи содержимого файла. (На самом деле, кроме относительных разделителей пути, версии для windows и unix могут быть идентичны)

Существует ли такой инструмент где-нибудь? Если нет, я, вероятно, напишу один на Java, но я рад принять решения на всех языках.

(Инструмент может работать под windows или unix, но целевая платформа для сгенерированных скриптов должна быть либо unix, либо настраиваемой)

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Я думаю, вы ищете 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-подобной системе и былопрактически навсегда).

0 голосов
/ 24 августа 2010

, если ваша проблема не в фильтрах, не ненавидящих текстовые файлы:

в давно забытые времена мы использовали код uuencode, чтобы пройти 8-битные реле питания это способ избавиться от вложений, поедающих почтовые ящики в эти дни? Так почему бы не почтовый индекс и uuencode? (или base64, который является его младшим двоюродным братом)

...