Как я могу скопировать данные из подкаталогов на один уровень выше, используя Linux

Обычно у пользователя может не быть каталога 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, скорее всего, мало по сравнению со временем выполнения компиляции.

0
29.03.2021, 15:57
1 ответ

Я бы использовал петлю:

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:, которая ограничивает результаты только каталогами.

1
28.04.2021, 22:55

Теги

Похожие вопросы