Есть небольшой проект, чтобы сделать. Мне нужно написать сценарий самораспаковывающегося архива, который можно использовать для объединения содержимого каталога, чтобы его можно было отправить по электронной почте непосредственно из командной строки.
Мне нужно написать сценарий оболочки, который будет объединять список файлов и/или каталогов и выводить их содержимое на стандартный вывод. Если есть каталог, то он будет рекурсивно проходить каждый подкаталог. Если файл не ASCII (если он двоичный), просто выполните для него uuencode.
Рекомендуемый способ сделать это — пометить начало каждой строки файла знаком «X»:
X contents
X contents
X contents
Таким образом, sed можно использовать для извлечения содержимого файла.
Вывод должен выглядеть так:
>ls
ping README.txt testsubdir
>cd testsubdir/
>ls
recursive_test.txt
> ./arch.sh ../testdir/ > bundle
head bundle
.
.
# This SHAR archive contains the following files
# testdir
if test -f testdir
then
echo "That would clobber testdir!"
> mkdir archtest
> cd archtest
> mv ../bundle .
>ls
bundle
> sh bundle
X - ping
-rw-rw-r-- 1 erik joe 54332 Oct 5 10:19 ping
X - README.txt
.............(same pattern)............. README.txt
X - recursive_test.txt
........................................ recursive_test.txt
> ls
bundle testdir
(рабочий каталог - testdir)
Нам нужно сначала проверить, является ли это файлом или каталогом, если это каталог, пройтись по нему. Если это файл и если это двоичный файл, мы должны выполнить над ним uuencode. Затем используйте sed для извлечения содержимого.
Проблема в том, что я не совсем понимаю, что именно мне нужно делать на каждом шаге и в каком порядке. Я знаю, как проверять типы файлов и как проверить, является ли файл двоичным или нет, но не знаю, как сделать это рекурсивно для каждого файла и пройтись по дереву подкаталогов, чтобы выполнить тесты для всех файлов. И я не знаю, как добавить «X» и как использовать команду sed, чтобы содержимое было помечено X.
Пожалуйста, дайте мне несколько веских примеров или подсказок, чтобы я мог начать и начать работать на их основе. Большое спасибо.
sed
в моем коде работает как фильтр для пропуска самораспаковывающегося содержимого скрипта.tar
будет объединять и извлекать содержимое каталога в архив. Честно говоря, я не понимаю пометочную часть вашего вопроса. Если вы хотите написать сценарий самораспаковывающегося архива, который можно использовать для объединения содержимого каталога, чтобы его можно было отправить по электронной почте напрямую, в моем ответе выше есть решение. Просто скопируйте весь нужный контент в один каталог, а затем упакуйте его с помощьюtar
и добавьте в скрипт. 13.10.2013