Also habe ich ein Repo mit einigen meiner Konfigurationsdateien und ich versuche ein zu erstellen makefile
, um sie im Homedir zu installieren. Das Problem, das ich habe, ist, dass, wenn ich den folgenden Befehl gerade in Bash ausführe
install -m 755 -d ~/path/to/dotfilesDir/ ~/
scheinbar passiert dabei nichts
install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/
funktioniert wie vorgesehen.
Warum funktioniert die erste (einfachere und sauberere) Lösung nicht?
Antworten:
Ein Blick auf die Manpage zeigt , dass
install
das nicht das tut, was Sie wollen.In der Tat gibt der Abschnitt "Synopsis" eine Verwendung des Formulars an:
und später sagt die Manpage:
Daher scheint es mir der Sinn dieser Option zu sein, eine komplizierte (aber leere) Verzeichnisstruktur à la installieren zu können
mkdir -p ...
.Sie können mit einer Schleife das erreichen, was Sie wollen:
Oder, wenn es unter viele Ebenen gibt
/path/to/DotFiles/dir
, können Sie Folgendes verwendenfind
:quelle
install -m 755 -d ~/foo/bar/baz
-exec 'install -m 755 "{}" ~/' +
wird nicht funktionieren, zumindest nicht auf bestimmten (alle? die meisten?) version von linux. Kann unter OSX oder so funktionieren. Die Verwendung von so etwas ist ziemlich einfach, wenn Sie einen Oneliner möchten: 1. Verzeichnisse rekursivfor d in $(find . -type d); do install -d --mode 755 "$d" "../install-test/$d"; done
erstellen : 2. Dateien rekursiv erstellen:for f in $(find . -type f); do install -D --mode 644 "$f" ../install-test/; done
Ausgehend von der Antwort von @Joseph R. ist dies meine Lösung, damit es mit find funktioniert, da ich sein Kommando nicht zum Laufen bringen konnte. (Ich glaube nicht, weil die Regeln für ... gelten
\+
: Nach dem{}
Element darf nichts stehen .) (Ich konnte keinen Kommentar abgeben. Dieser ganze Absatz kann tatsächlich entfernt werden.)So kopieren Sie alle Dateien in genau dasselbe Verzeichnis (hier
target/directory
):-D
ist hier nicht zwingend erforderlich, es werden nur die nicht vorhandenen Verzeichnisse zum Ziel angelegt.So kopieren Sie eine ganze Verzeichnishierarchie und ihre Dateien (dabei werden leere Verzeichnisse weggelassen) von Ihrem aktuellen Standort aus:
Wie gesagt, wird hierdurch der Baum neu erstellt, beginnend mit
$PWD
. Auch wenn Sie das leere Verzeichnis kopieren müssen, könnte on eine Möglichkeit finden, das-type d
von zu verwendenfind
undinstall -d
.Um den Baum zu kopieren, gehen Sie also von einem Verzeichnis aus, das nicht
$PWD
:Beachten Sie, wie
parent/directory
nicht kopiert wird.Extra
Für diejenigen
shell/fish
, die es benutzen , ist hier die Zeile, die dasselbe tut:quelle