Flaga GNU „install” -d - jak to działa?


26

Próbuję napisać regułę makefile, aby skopiować katalog, zachowując jego strukturę, a ponieważ wszystkie inne reguły w naszych plikach makefile używają install, chciałem zachować spójność.

Na stronie podręcznika jest napisane:

STRESZCZENIE

   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, to brzmi jak to, czego potrzebuję ... ale flagi nie mają sensu. Jak określić katalog docelowy do zainstalowania?

Próbowałem wykonać podstawowy test, tworząc dowolną strukturę katalogów na lokalnym dysku twardym:

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

4 directories, 1 file

A potem bieganie install -di patrzenie na to, co zostało stworzone:

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

0 directories, 0 files

Nic się nie stało!

Czy ktoś może skierować mnie we właściwym kierunku? Googling „gnu install -d flag” nie przynosi mi wiele.

Odpowiedzi:


18

Wygląda na to, że install -Dpolecenie jest właściwie tym, czego chcę.

Manpage:

-D utwórz wszystkie wiodące komponenty DEST oprócz ostatniego, a następnie skopiuj ŹRÓDŁO do DEST

Działa świetnie, ale musisz określić każdy plik osobno.


8
Byłem podekscytowany do samego końca: „musisz określić każdy plik indywidualnie”. Chyba będę się trzymałcp -r
dtmland

7
Czy polecenie instalacji ma odpowiednik cp -r?
Alexander

14

install -dsłuży tylko do tworzenia katalogów. Kazałeś mu stworzyć dwa katalogi testi test2. testjuż istniał, więc wystarczyło zrobić test2. Nie sądzę, że installobsługuje kopiowanie całych drzew katalogów; jest zwykle używany w plikach. Prawdopodobnie musisz użyćcp


2
Zasadniczo install -djest to samo, mkdirz tym wyjątkiem, że możesz jednocześnie określić tryb, właściciela, kontekst SELinux i grupę.
ZiggyTheHamster

0

Zwykle chcesz zainstalować pliki w odpowiednim folderze, bez powtarzania się. Możesz użyć funkcji Znajdź i zainstaluj, aby skrypty instalacyjne były bardziej suche

find SOURCE/ -type f -exec install -vDm 755 {} THERE/{} \;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.