Флаг установки GNU -d - как это работает?

26

Я пытаюсь написать правило make-файла для копирования каталога, сохраняя его структуру, и, поскольку все другие правила в наших make-файлах используются install, я хотел быть последовательным.

На странице руководства написано:

СИНТАКСИС

   install [OPTION]... [-T] SOURCE DEST
   install [OPTION]... SOURCE... DIRECTORY
   install [OPTION]... -t DIRECTORY SOURCE...
   install [OPTION]... -d DIRECTORY...

   -d, --directory
          treat all arguments as directory names; create all components of
          the specified directories

Хорошо, это звучит как то, что мне нужно ... но флаги не имеют смысла. Как указать каталог для установки?

Я попытался выполнить базовый тест, создав произвольную структуру каталогов на локальном жестком диске:

~>tree test
test
├── a
│   └── b
│       └── c
│           └── e.txt
└── d

4 directories, 1 file

А потом работает install -dи смотрит на то, что было создано:

~>install -d test test2
~>tree test2
test2

0 directories, 0 files

Ничего не произошло!

Может кто-то указать мне верное направление? Погуглить "gnu install -d flag" не так уж и много.

ashgromnies
источник

Ответы:

18

Похоже, что install -Dкоманда на самом деле то, что я хочу.

Manpage:

-D создать все ведущие компоненты DEST, кроме последнего, затем скопировать SOURCE в DEST

Прекрасно работает, за исключением того, что вы должны указать каждый файл индивидуально.

ashgromnies
источник
8
Я был взволнован до самого конца, «вы должны указать каждый файл индивидуально». Думаю, я буду придерживатьсяcp -r
dtmland
7
Команда install имеет эквивалент cp -r?
Александр
14

install -dпросто используется для создания каталогов. Вы сказали это создать две директории, testи test2. testуже существует, так что все, что нужно было сделать, это сделать test2. Я не думаю, что installподдерживает копирование целых деревьев каталогов; это обычно используется в файлах. Вам, вероятно, нужно использоватьcp

Михаил Мрозек
источник
2
По сути, install -dэто то же самое, mkdirчто вы можете указать режим, владельца, контекст SELinux и группу одновременно.
ZiggyTheHamster
0

Обычно вам нужно установить файлы в нужную папку, не повторяя себя. Вы можете использовать поиск и установку, чтобы сохранить ваши установочные скрипты более СУХОЙ

find SOURCE/ -type f -exec install -vDm 755 {} THERE/{} \;
гекконы
источник