Обычно у пользователя может не быть каталога bin. Подобный Makefile позволяет вам указать make DESTDIR=/usr/local/bin install
для установки в /usr/local/bin, а по умолчанию — ~/bin
# DESTDIR is where the program should be installed
DESTDIR = $$HOME/bin
prog: a.c b.c
${CC} -o $@ $<
install: prog
mkdir -p ${DESTDIR}
cp $< ${DESTDIR}
это делает программу из пары файлов C. Цель install
создает каталог bin, если он не существует (, -p останавливает выдачу ошибок, если он существует ), а затем копирует файл. Обратите внимание на $$
в переменных оболочки.
GNU make позволяет order only prerequisite
создать каталог только в том случае, если он не существует, но время запуска mkdir, скорее всего, мало по сравнению со временем выполнения компиляции.
Я бы использовал петлю:
from=some/path
to=some/other/path2
for dir in "$from"/A/*/; do
dest=${dir/#$from/$to}
mkdir -p "$dest"
cp -v "$dir"/*/*.txt "$dest"
done
Обратите внимание на косую черту в конце шаблона в команде for
:, которая ограничивает результаты только каталогами.