GNU "install" -d flag: ¿cómo funciona?

26

Estoy tratando de escribir una regla de archivo MAKE para copiar un directorio, manteniendo su estructura, y dado que todas las demás reglas en nuestros archivos MAKE usan install, quería ser coherente.

En la página de manual, dice:

SINOPSIS

   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

OK, eso suena como lo que necesito ... pero las banderas no tienen sentido. ¿Cómo se especifica el directorio de destino para instalar?

Intenté hacer una prueba básica haciendo una estructura de directorio arbitraria en mi disco duro local:

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

4 directories, 1 file

Y luego corriendo install -dy mirando lo que se creó:

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

0 directories, 0 files

¡No pasó nada!

¿Alguien puede señalarme en la dirección correcta? Buscar en Google "gnu install -d flag" no me trae mucho.

ashgromnies
fuente

Respuestas:

18

Parece que el install -Dcomando es en realidad lo que quiero.

Página de manual:

-D crea todos los componentes principales de DEST excepto el último, luego copia SOURCE a DEST

Funciona muy bien, excepto que debe especificar cada archivo individualmente

ashgromnies
fuente
8
Estaba emocionado hasta el final, "tienes que especificar cada archivo individualmente". Supongo que me quedaré concp -r
dtmland
77
¿El comando de instalación tiene un equivalente a cp -r?
Alexander
14

install -dsolo se usa para crear directorios. Le dijiste que creara dos directorios, testy test2. testya existía, así que todo lo que tenía que hacer era hacer test2. No creo que sea installcompatible con copiar árboles de directorios completos; normalmente se usa en archivos. Probablemente necesites usarcp

Michael Mrozek
fuente
2
Básicamente, install -des lo mismo, mkdirexcepto que puede especificar el modo, el propietario, el contexto de SELinux y el grupo de una vez.
ZiggyTheHamster
0

Por lo general, lo que desea es instalar archivos en la carpeta correcta, sin repetirlo. Puede usar buscar e instalar para ayudar a mantener sus scripts de instalación más SECOS

find SOURCE/ -type f -exec install -vDm 755 {} THERE/{} \;
gecos
fuente