Следующий цикл будет обрабатывать каждый каталог в текущем каталоге так, как вы описываете:
for dir in */; do
cat "$dir"/*.txt >"${dir%/}.txt"
done
Вещь ${dir%/}
удаляет конечный /
из $dir
, который находится там, из совпадения шаблона в заголовке цикла.
Ошибка, которую вы получаете, вероятно, связана с написанием сценария на компьютере с Windows (с помощью редактора Windows ). Текстовые файлы Windows (и DOS )имеют символ возврата каретки перед символом перевода строки в конце каждой строки, в то время как текстовые файлы Unix имеют только символ перевода строки. Вы можете преобразовать сценарий в текстовый файл Unix с помощью утилиты dos2unix
.
Я делаю что-то подобное, когда у меня есть машина сборки, которая отслеживает изменения в моей системе контроля версий, затем выполняет автоматическую сборку и использует dput *.changes
или scp *.deb
для каталога incoming/
на сервере, который я размещаю.
Этот сервер работает reprepro
, и когда *.deb
файлы появляются в этом каталоге incoming/
, запускается скрипт reprepro includedeb <suite> *.deb
.
Вот пример руководства о том, как это настроить.
Вашим пользователям просто нужно apt-key add
ваш ключ GPG и создать /etc/apt/sources.list.d/*.list
ссылку на ваш репозиторий.
Для этого вам сначала нужно создать и разместить фактический архив apt.
Инструкции здесь должны объяснять шаги, которые вам необходимо предпринять --большинство из них можно автоматизировать с помощью программного обеспечения, но вы должны знать о них в любом случае.
Вам также потребуется подписать файлы deb и release и сообщить своим пользователям, где они могут скачать ваш открытый ключ, чтобы проверить ваш файл Release.
Затем , когда у вас все это заработает, вам придется подумать о добавлении «собрать deb, загрузить deb, воссоздать и подписать файл Release» в обновление репозитория.
Все это можно сделать, но это решительно нетривиально.