Mam więc repozytorium z niektórymi moimi plikami konfiguracyjnymi i próbuję utworzyć plik, makefile
aby zainstalować je w homedir. Problemem jest to, że kiedy uruchamiam następujące polecenie prosto w bash
install -m 755 -d ~/path/to/dotfilesDir/ ~/
pozornie nic się nie dzieje
install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/
działa zgodnie z przeznaczeniem.
Dlaczego pierwsze (łatwiejsze i czystsze) rozwiązanie nie działa?
Odpowiedzi:
Spojrzenie na stronę podręcznika pokazuje, że
install
nie zrobi tego, co chcesz.Rzeczywiście sekcja Synopsis wskazuje użycie formularza:
a później strona man mówi:
Wydaje mi się więc, że celem tej opcji jest możliwość zainstalowania skomplikowanej (ale pustej) struktury katalogów à la
mkdir -p ...
.Możesz osiągnąć to, co chcesz za pomocą pętli:
Lub, jeśli jest wiele poziomów poniżej
/path/to/DotFiles/dir
, możesz użyćfind
:źródło
install -m 755 -d ~/foo/bar/baz
-exec 'install -m 755 "{}" ~/' +
nie zadziała, przynajmniej nie na niektórych (wszystkich? najbardziej?) wersjach systemu Linux. Może działać na OSX lub coś takiego. Używanie czegoś takiego jest dość proste, jeśli chcesz oneliner: 1. twórz katalogi rekurencyjne:for d in $(find . -type d); do install -d --mode 755 "$d" "../install-test/$d"; done
2. twórz pliki rekurencyjne:for f in $(find . -type f); do install -D --mode 644 "$f" ../install-test/; done
Począwszy od odpowiedzi @Josepha R., jest to moje rozwiązanie, aby działało z find, ponieważ nie mogłem sprawić, by jego polecenie działało. (Nie sądzę, żeby tak było, ponieważ obowiązują zasady
\+
: po{}
elemencie nie może być niczego .) (Nie mogłem komentować. Cały ten akapit można faktycznie usunąć.)Aby skopiować wszystkie pliki do dokładnie tego samego katalogu (tutaj
target/directory
):-D
nie jest tutaj obowiązkowe, po prostu utworzy nieistniejące katalogi do celu.Aby skopiować całą hierarchię katalogów i jej pliki (spowoduje to pominięcie pustych katalogów), zaczynając od miejsca, w którym aktualnie się znajdujesz:
Jak powiedziano, odtworzy to drzewo, zaczynając od
$PWD
. Również, jeśli chcesz skopiować pustego katalogu na mogłyby znaleźć sposób używając-type d
offind
ainstall -d
.Aby więc skopiować drzewo, zaczynając od katalogu, który nie jest
$PWD
:Zauważ, że
parent/directory
nie jest kopiowane.Dodatkowy
Dla tych
shell/fish
, którzy używają , oto linia, która robi to samo:źródło