Verwenden Sie `ln`, um ein fehlendes Verzeichnis zu erstellen

Verwenden Sie `ln`, um ein fehlendes Verzeichnis zu erstellen

Ich schreibe gerade einen kleinen Paketmanager und bin auf ein Problem gestoßen, das die Erstellung der symbolischen Links zu Dateien betrifft.

Es installiert das Paket in /usr/pkg/name-versionund liest dann eine Datei, um zu bestimmen, welche symbolischen Links erstellt werden sollen. Ich verwende lnzum Erstellen der Links und bin beim Versuch, die Linux-API-Header zu installieren, auf ein Problem gestoßen. Ich muss die Header-Dateien selbst verknüpfen, nicht die Ordner, die sie enthalten (wenn also 2 Pakete Dateien im selben Unterverzeichnis von include ablegen müssen, können sie das, ohne ein Paket zu vermasseln).

Dieses Problem habe ich gelöst, aber lnes tritt einfach ein Fehler auf, wenn der Pfad unvollständig ist, was ärgerlich ist, da diese Verzeichnisse nicht existieren sollten, bis das Paket installiert ist.

Gibt es ein Flag, lndas alle fehlenden Verzeichnisse erstellt, oder muss ich mit einem komplizierten Bash-Skript vorgehen?

Antwort1

Dafür gibt es kein Flag ln. Das Erstellen von Verzeichnissen ist nicht seine Aufgabe.

mkdir -p foo/bar/quxwird erstellt foo, foo/barund foo/bar/quxzwar nach Bedarf. Rufen Sie also mkdir -pzuerst alle Pfadkomponenten außer der letzten auf.

Es klingt, als würden Sie das Rad neu erfinden Verstauen, ein einfacher Paketmanager, der Verzeichnishierarchien zusammenführt, indem er Verzeichnisse in der erforderlichen Tiefe mit symbolischen Links zu Komponenten verschiedener Pakete darin erstellt. Oder vielleichtXStow, das wie Stow ist, aber mehr Anpassungsmöglichkeiten bietet.

Antwort2

Sie benötigen kein kompliziertes Bash-Skript, sondern einen einfachen Einzeiler. Dieser mkdir --parentskümmert sich um alles und gibt netterweise nicht einmal einen Fehler aus, wenn die Verzeichnisstruktur bereits vorhanden ist.

Gehen Sie beim Entfernen dieser Verzeichnisse vorsichtig vor, damit andere Pakete nicht beschädigt werden.

Und da Sie es in schreiben bash, können Sie einen Blick aufZauberei(unverhohlene Werbung). Vielleicht wäre es einfacher, das einfach zu ändern, da es ausgereift und flexibel ist.

Antwort3

Vielleicht tarkönnte es helfen, die Datei mit den Links vorzubereiten:

find . -type l > links.txt
tar cpf links.tar --files-from links.txt

Und erstellen Sie dann bei Bedarf die Links:

tar xvf links.tar

verwandte Informationen