WedX - журнал о программировании и компьютерных науках

объединить все содержимое файлов в заданном каталоге и его подкаталогах

Есть небольшой проект, чтобы сделать. Мне нужно написать сценарий самораспаковывающегося архива, который можно использовать для объединения содержимого каталога, чтобы его можно было отправить по электронной почте непосредственно из командной строки.

Мне нужно написать сценарий оболочки, который будет объединять список файлов и/или каталогов и выводить их содержимое на стандартный вывод. Если есть каталог, то он будет рекурсивно проходить каждый подкаталог. Если файл не 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.

Пожалуйста, дайте мне несколько веских примеров или подсказок, чтобы я мог начать и начать работать на их основе. Большое спасибо.

12.10.2013

  • возможно, вам нужна команда find для рекурсивного просмотра структуры каталогов. 12.10.2013
  • Хороший вопрос, Лайош. Возможно, ответ здесь: stackoverflow.com/questions/10523415/ . Найдите пример команды «найти» 12.10.2013
  • Привет, спасибо, ребята. Я попытался найти файл в каталоге /, но $file на самом деле не прошел весь каталог и его подкаталоги. Делает ли это автоматически синтаксис for...in...? Благодарность 13.10.2013

Ответы:


1

Если вам недостаточно shar, вы можете создать собственное решение, используя < архив href="https://www.gnu.org/software/tar/manual/tar.html" rel="nofollow">tar.

Сначала вы создадите сценарий самораспаковывания, например:

#!/usr/bin/bash

sed '0,/^_ARCHIVE/d' "$0" | tar xvz

exit 0

_ARCHIVE

И чем вы можете добавить к нему контент, просто:

tar cz your_directory >> your_sfx.sh

Вы можете добавить к своему самораспаковщику все, что хотите, проверку суммы, дополнительную информацию, запуск скрипта установки. Это тебе решать. Вы также можете вставить любой другой фильтр для изменения кодировки. Например, base64 в sfx-скрипте, который вы будете использовать

#!/usr/bin/bash

sed '0,/^_ARCHIVE/d' "$0" | base64 -d | tar xvz

exit 0

_ARCHIVE

и в команде создания

tar cz your_directory | base64 >> your_sfx.sh
12.10.2013
  • Привет, Хайнек, это для пометки содержимого? Не могли бы вы подробнее рассказать о sed и tar? Не совсем понял код. Извините, я только что узнал о сценариях оболочки. Большое спасибо за ваше время. 13.10.2013
  • sed в моем коде работает как фильтр для пропуска самораспаковывающегося содержимого скрипта. tar будет объединять и извлекать содержимое каталога в архив. Честно говоря, я не понимаю пометочную часть вашего вопроса. Если вы хотите написать сценарий самораспаковывающегося архива, который можно использовать для объединения содержимого каталога, чтобы его можно было отправить по электронной почте напрямую, в моем ответе выше есть решение. Просто скопируйте весь нужный контент в один каталог, а затем упакуйте его с помощью tar и добавьте в скрипт. 13.10.2013
  • Привет Хайнек, большое спасибо. но я не думаю, что это то, что я должен делать. Я думаю, это потому, что мой вопрос не очень ясен. Я повторно разместил задачу здесь: stackoverflow.com/questions/19368940/ Посмотрите, если у вас есть время. Благодарность 15.10.2013
  • @YongfengZhang: не вижу проблемы. Если вы используете версию с кодировкой base64, вы получите чистый текст, поэтому вы можете отправить его по электронной почте. 15.10.2013
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]