Bandeira “install” -d do GNU - como funciona?

26

Estou tentando escrever uma regra de makefile para copiar um diretório, mantendo sua estrutura e, como todas as outras regras em nossos makefiles são usadas install, eu queria ser consistente.

Na página de manual, diz:

SINOPSE

   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, parece o que eu preciso ... mas as bandeiras não fazem sentido. Como você especifica o diretório de destino para instalar?

Tentei fazer um teste básico criando uma estrutura de diretório arbitrária no meu disco rígido local:

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

4 directories, 1 file

E então executando install -de olhando o que foi criado:

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

0 directories, 0 files

Nada aconteceu!

Alguém pode me apontar na direção certa? Pesquisar no Google "gnu install -d flag" não está me trazendo muito.

ashgromnies
fonte

Respostas:

18

Parece que o install -Dcomando é realmente o que eu quero.

Página de manual:

-D crie todos os principais componentes do DEST, exceto o último, e copie SOURCE para o DEST

Funciona muito bem, exceto que você precisa especificar todos os arquivos individualmente.

ashgromnies
fonte
8
Fiquei empolgado até o final ", você precisa especificar cada arquivo individualmente". Acho que vou ficar comcp -r
dtmland
7
O comando de instalação tem um equivalente a cp -r?
Alexander
14

install -dé usado apenas para criar diretórios. Você disse para criar dois diretórios teste test2. testjá existia, então tudo o que precisava fazer era fazer test2. Eu não acho que installsuporta copiar árvores de diretório inteiras; normalmente é usado em arquivos. Você provavelmente precisa usarcp

Michael Mrozek
fonte
2
Basicamente, install -dé o mesmo que, mkdirexceto que você pode especificar o modo, proprietário, contexto do SELinux e agrupar todos de uma vez.
ZiggyTheHamster 28/08
0

Normalmente, o que você deseja é instalar arquivos na pasta correta, sem se repetir. Você pode usar o find e o install para ajudar a manter os scripts de instalação mais secos

find SOURCE/ -type f -exec install -vDm 755 {} THERE/{} \;
lagartixas
fonte