Wie generiere ich automatisch Symlinks?

555
CelluloidRacer2

Nicht sicher, ob dies der richtige Ort ist, um dies zu posten (falls nicht, sorry)

Aufgrund einiger Einschränkungen (und Präferenzen) befinde ich mich in einer Sackgasse. Auf dem Computer wird ProxmoxVE (Debian / QEMU-basierter Hypervisor) ausgeführt.

Das Problem ist, dass Proxmox nicht in Unterverzeichnissen nach .iso-Dateien sucht (für die Bereitstellung von VMs erforderlich) und ich die Struktur des Dateirepositorys nicht ändern kann.

Ich versuche herauszufinden, wie Symlinks automatisch basierend auf der Dateierweiterung generiert werden. Meine Idee ist es, ein Verzeichnis mit dynamischen Zuordnungen zu jeder .iso-Datei zu haben, so dass ich sie leicht hinzufügen oder entfernen kann.

Beispiel Dateistruktur:

Folder A -Folder B -ISO A -Folder C -ISO B -ISO C -ISO D 

Erforderliche Dateistruktur:

Folder A -ISO A -ISO B -ISO C -ISO D 

Ich kann Skripts nach Bedarf ausführen, habe aber nicht das Wissen, dieses Skript zu schreiben.

Jede Hilfe wäre sehr dankbar!

Bearbeiten 1: Ich habe einen anderen Ordner, in dem alle Symlinks gespeichert werden sollen

0
Sie können es nicht genau so machen, wie Sie es wollten, Sie können entweder einen neuen Ordner mit der abgeflachten Struktur haben oder (Dateisystem erlaubt), Sie können einen Symlink in Ordner A haben und die vorhandene abgeflachte Struktur ebenfalls beibehalten. Können Sie Ordner A in Ihrem zweiten Code-Snippet "Ordner A" in "NewFolderA" ändern? davidgo vor 6 Jahren 0
Ich habe vergessen, hinzuzufügen, dass ich ein anderes Verzeichnis habe, in das ich alle Symlinks einfügen möchte. Ich habe es mit einem getestet, möchte es jedoch dynamisch aktualisieren. CelluloidRacer2 vor 6 Jahren 0

1 Antwort auf die Frage

0
davidgo

Dies kann als Einliner wie folgt durchgeführt werden:

find "/path/to/FolderA" -type f -name "*iso" -exec ln -s {} /path/to/symlinkfiles \; 

Um daraus ein Skript zu machen

#!/bin/bash SOURCEFILES="/path/to/folderA" FLATTENEDFILEDIR="/path/to/folderB"  find "$SOURCEFILES" -type f -name "*.iso -exec ln -s {} $FLATTENEDFILEDIR \; 

Dies funktioniert folgendermaßen: Der Befehl find sucht nach Dateien an einem bestimmten Ort, der "Typ f" bedeutet, dass er nur nach Dateien sucht. Symlinks und Unterverzeichnisse werden nicht ausgeführt (die Verzeichnisse werden jedoch nach Dateien durchsucht), die * .iso-Datei erwartet, dass dies die Dateierweiterung ist.

Der zweite Teil (after -exec) wird für jede Datei ausgeführt und erstellt den Symlink.

Möglicherweise möchten Sie oben in diesem Skript etwas wie "rm -r $ FLATTENEDFILESDIR / *" einfügen, wenn Sie vorhandene Symlinks entfernen dürfen, damit Sie nicht mit Toten landen Wenn Sie dies nicht tun, kann dies zu einem Großteil Ihres Systems führen!

Sie können diesen Befehl oder dieses Skript auslösen, um in regelmäßigen Abständen von cron ausgeführt zu werden, um Updates zu automatisieren. davidgo vor 6 Jahren 0
Vielen Dank! Zur Bestätigung wird durch Ausführen von rm -r der Symlink entfernt, die eigentliche Datei jedoch nicht, oder? CelluloidRacer2 vor 6 Jahren 0
rm -r * entfernt * rekursiv * alles, was mit dem angegebenen Parameter übereinstimmt, einschließlich Symlinks und reguläre Dateien. Dadurch wird alles im FLATTENEDFILESDIR entfernt. Der Klarheit halber werden die Symlinks in diesem Verzeichnis entfernt, jedoch nicht die Dateien, auf die die Symlinks verweisen, wenn sie sich in einem anderen Verzeichnis befinden. davidgo vor 6 Jahren 0