gerry56
Goto Top

Rückgabewert von ln kann nicht in Variable gespeichert werden

Ein Hallo an die Experten!

Ich habe schon länger keine Batchdateien erstellt.
Daher muß ich derzeit öfter nachblättern oder hier im Forum nachfragen.

Bei dieser Gelegenheit ein großes Lob an die Spezialisten.
Die Anfragen werden rasch und kompetent beantwortet.

Meine Batchdatei ist fast komplett.
Natürlich wurde die Batchdatei umfangreicher als von Beginn an geplant. Dafür ist diese Batchdatei universeller als geplant.
Aktuell habe ich noch 2 Probleme.

Problem 1 ist die Speicherung vom Rückgabewert.

Ich möchte in der Batchdatei abfragen, wohin der Link (Junction oder Symbolic) eines Verzeichnisses oder einer Datei verweist.
Da die Möglichkeit besteht, daß dieses Verzeichnis ein eigenständiger Verzeichniseintrag ist, und daher kein Symboliklink und auch kein Junctioneintrag vorhanden ist,
möchte ich die Bildschirmausgabe in eine Variable umleiten.
Wenn der Rückgabetext mit ERROR: beginnt, möchte ich als Bildschirmanzeige den Text "Das Verzeichnis xxxxx ist ein eigenständiges Verzeichnis ohne Linkeintrag." auf dem Bildschirm anzeigen.
Gibt es einen Eintrag, so möchte ich die Verlinkung auf dem Bildschirm anzeigen lassen.

Mit dem Programm FSUTIL ist mir dieses Vorhaben gelungen
for /f "tokens=1 delims=:" %%a in ('fsutil hardlink list "%hardlinkziel%" ^| findstr /n .') do set cnt=%%a
if %cnt% GTR 1 (
fsutil hardlink list %hardlinkziel%
echo Das Verzeichnis %hardlinkziel% ist ein Hardlink mit %cnt% Einträgen.
) else (
echo Das Verzeichnis %hardlinkziel% hat KEINEN Hardlinkeintrag.
)

Beim Programm LN schaffe ich es aber nicht.
Die Bildschirmausgabe in eine Variable umzuleiten und den Inhalt weiter zu verarbeiten gelingt mir nicht.
Den Inhalt des Rückgabewertes vom Programm LN möchte ich wie folgt auswerten.
Entweder überprüfen, ob der Rückgabewert (Fehlermeldung) mit ERROR: beginnt.
Oder überprüfen, ob der Textteil -> im Rückgabewert vorhanden ist. In diesem Fall wäre der Rückgabewert mit der Pfadangabe und Dateiname des Links zu vergleichen.

zum Beispiel
D:\hardlink\ln --junction %hardlinkziel% > %merkvar%
Wenn der Inhalt der Variablen hardlinkziel im Inhalt der Variablen merkvar vorhanden ist, sollte in der Variablen merkvar der Verweis vom hardlinkziel zur Originaldatei stehen.

Bevor als Antwort die Frage kommt, wozu ich die Abfrage mit dem Programm LN machen will, gebe ich hiermit gleich die Erklärung und damit mein zweites Problem.

In dieser Batchdatei sollen Hardlinks für verschiedene Anwendungen erstellt werden.
Je nach Anwendung soll der Hardlink gleich für ein komplettes Verzeichnis oder auch nur für einzelne Dateien erstellt werden.

Ich habe es zwar geschafft, für alle 4 Möglichkeiten eine Batchabfrage zu erstellen, jedoch gelingt mir das leider nicht mit einer einzigen Abfrage.

Die Abfragemöglichkeit für Symlink einer Datei und für Symlink eines Verzeichnisses habe ich gelöst
D:\hardlink\ln --symbolic %hardlinkziel%
LN zeigt den verlinkten Pfad mit Linkdateiname und den Pfad mit Originaldateiname

Um Hardlinks abzufragen, benötige ich bei Verzeichnissen auch das Programm LN, aber mit einem anderen Abfrageparameter.
D:\hardlink\ln --junction %hardlinkziel%
LN zeigt den verlinkten Pfad mit Linkdateiname und den Pfad mit Originaldateiname

Für die Abfrage vom verlinkten Ziel eines Hardlinks für eine Datei benötige ich das Programm FSUTIL
D:\hardlinks\fsutil hardlink list "%hardlinkziel%"
FSUTIL zeigt den verlinkten Pfad mit Linkdateiname und den Pfad mit Originaldateiname.


Bitte um Problemlösung
Bitte um Problemlösung 1,
Wie kann ich mit dem Programm LN die Rückgabe in eine Variable umleiten
und nach Auswertung - z.B. Überprüfung, ob am Textbeginn ERROR: steht - den gewünschten Text auf dem Bildschirm anzeigen.

Bitte um Problemlösung 2)
Ist es mit dem Programm LN oder mit dem Programm FSUTIL mit anderen mir nicht bekannten Abfrageeinstellungen möglich, mit 1 Routine alle 4 Varianten abzufragen.
z. b. D:\hardlink\ln --junction --symbolic %hardlinkziel% :rem Habe ich probiert, funktioniert aber nicht.
oder gibt es ein anderes Programm mit dem man mit einer einzigen Abfrage die Info bekommt,
ob es sich um eine symbolische Verknüpfung oder um einen Hardlink handelt, und wohin der Link verweist.

PS: Batchdatei, die mit dem Commandprompt auf allen Windows-Varianten funktionieren soll.

Danke im voraus
Gerry

Content-ID: 1849433086

Url: https://administrator.de/contentid/1849433086

Ausgedruckt am: 18.11.2024 um 09:11 Uhr

gerry56
gerry56 08.02.2022 um 21:29:26 Uhr
Goto Top
Hat denn keiner eine Idee, um meine beiden Probleme zu lösen?

Gerry
rubberman
rubberman 09.02.2022 um 18:02:57 Uhr
Goto Top
Du kannst doch nicht einfach davon ausgehen, dass jeder weiß was das "Programm LN" ist, was es tut, wie die Ausgabe aussieht und ob es nun zum StdOut oder womöglich zum StdErr Stream schreibt. Vielleicht verlinkst du zumindest mal auf die Location wo du das Tool heruntergeladen hast? Vielleicht findet sich nur dann jemand der bereit ist das Ding auch herunter zu laden um dir zu helfen?

Steffen
gerry56
gerry56 10.02.2022 um 14:13:09 Uhr
Goto Top
Hallo rubberman!

Danke für die Antwort.
Da ich in meiner Problembeschreibung geschrieben habe, daß ich mit dem Programm FSUTIL und mit dem Programm LN abfragen möchte, wohin der Link einer Datei / eines Verzeichnisses verweist, habe ich angenommen, daß daher für jeden Leser klar ist, was die Programme FSUTIL und LN machen.

Die von mir verwendeten Abfragen für FSUTIL und NL habe ich im Eingangspost angegeben.

Daher beschreibe ich hier nur mehr, wofür ich FSUTIL und LN benutze.
Das Programm FSUTIL kann für die Erstellung von Hardlinks zu Dateien verwendet werden.
Hardlinks zu Verzeichnissen, Softlinks zu Verzeichnissen und Softlinks zu Dateien können mit FSUTIL NICHT erstellt werden.
Zusätzlich kann mit dem Programm FSUTIL der Verweis eines Hardlinks abgefragt werden.

Mit dem Programm LN.exe (https://schinagl.priv.at/nt/ln/ln.html) und https://www.drwindows.de/news/software-vorstellungen/ln-exe)
kann ein Softlink für eine Datei, ein Hardlink für eine Datei und ein Hardlink für ein Verzeichnis erstellt werden.
erstellt werden.
Zusätzlich kann mit dem Programm LN.exe der Verweis von einem Softlink einer Datei, der Softlink eines Verzeichnisse und der Hardlink einer Datei abgefragt und angezeigt werden.

Leider schaffe ich es nicht, mit dem Programm LN den Verweis eines Hardlinks zu einem Verzeichnis abzufragen und anzuzeigen.
Kann dies das Programm nicht, oder mache ich etwas falsch.
Es ist mir bisher auch nicht gelungen, mit einer einzigen neutralen Abfrage alle Arten von Links (Hardlink und Softlink) für Verzeichnisse und Dateien abzufragen.
Sollte es doch möglich sein, bin ich für jeden Hinweis dankbar.

Zusatzhinweis.
Die Links erstelle ich mit dem Programm mklink, da mit dieser einzigen Anwendung alle 4 Varianten erstellt werden können.
Die Befehle sollen in einer Batchdatei funktionieren, die über den Dosprompt (CMD) - mit Administratorrechten - ausgeführt wird.

Gerry
rubberman
rubberman 10.02.2022 um 18:44:28 Uhr
Goto Top
Leider schaffe ich es nicht, mit dem Programm LN den Verweis eines Hardlinks zu einem Verzeichnis abzufragen und anzuzeigen.
Hab das Ding mal runtergeladen. Schreibt zu StdOut, somit ist das Extrahieren wie bei jedem anderen Tool über FOR /F ohne Workarounds möglich.
Code:
@echo off &setlocal

echo Ausgabe von LN:
ln --junction "a"  
echo(

for /f "skip=1 tokens=2 delims=>" %%i in ('ln --junction "a"') do for /f "tokens=*" %%j in ("%%i") do set "merkvar=%%j"  
echo merkvar:
echo "%merkvar%"  
echo(

pause

Ausgabe meines Tests:
Ausgabe von LN:
ln 2.933
C:\Users\steffen\Documents\lnstatic\a -> C:\Users\steffen\Documents

merkvar:
"C:\Users\steffen\Documents"

Drücken Sie eine beliebige Taste . . .

Steffen
gerry56
gerry56 12.02.2022 um 00:06:12 Uhr
Goto Top
Hallo Steffen.

Danke für deine Meldung.
Leider bringt deine Lösung nicht mehr, als die von mir bisher verwendete Variante
D:\hardlink\ln --symbolic %hardlinkziel%

Wenn die gesuchte Datei ein Hardlink ist, und es wird mittels LN der Symlink dieser Datei abgefragt, wird bei beiden Varianten als Ergebnis der Verzeichnispfad mit Dateiname und der Zahl 2 angezeigt.
In diesem Fall möchte ich statt der falschen Anzeige die Meldung, daß die gewählte Datei KEIN Symlink ist.

Will ich den Hardlink von Dateien oder Verzeichnissen ermitteln, (Parameterabfrage --junction), kommt bei Dateien mit einem Hardlink und bei Dateien mit einem Softlink und auch bei Verzeichnissen mit einem Softlink die Fehlermeldung "ERROR: d:\Pfad der gesuchten Datei" is not a junction.
Nur bei Verzeichnissen mit einem Hardlink wird der Link zum Ursprungsverzeichnis angezeigt.
Abgesehen davon, daß bei dieser Abfrage das Ergebnis bei Hardlinkdateien falsch ist, möchte ich auch hier die Fehlermeldung abfangen.

Deine Abfrage ist zwar ein anderer Weg als meiner, bringt aber leider nicht das von mir gewünschte Ergebnis.
Außerdem muß genauso wie bei meiner Variante für Hardlinks und für Softlinks eine eigene Abfrageroutine erstellt werden.

Gerry


Ich möchte, so wie es beim Tool FSUTIL möglich ist, den Ausgabewert - ohne Bildschirmausgabe) in einer Variablen verarbeiten.
Je nach Ergebnis soll dann der verlinkte Pfad oder die Meldung, daß die Datei / das Verzeichis kein Link ist, ausgegeben werden.
rubberman
rubberman 12.02.2022 um 12:37:01 Uhr
Goto Top
for /f "skip=1 tokens=2 delims=>" %%i in ('ln -j "b"') do for /f "tokens=*" %%j in ("%%i") do set "lnk=%%j"  
if not defined lnk (
  for /f "skip=1 tokens=2 delims=>" %%i in ('ln -s "b"') do for /f "tokens=2 delims=()" %%j in ("%%i") do set "lnk=%%j"  
)
echo lnk:
echo "%lnk%"  

Bei Hardlinks gibt es so etwas wie "die Originaldatei" nicht. Ich weiß nicht was du da vorhast. FSUTIL listet alle Namen auf die auf dieselbe physische Adresse auf dem Laufwerk verweisen. Und das können auch 10 oder 1000 sein.

Steffen
gerry56
gerry56 12.02.2022 um 13:35:13 Uhr
Goto Top
Hallo Rubberman!

Es ist mir schon klar, daß es bei Harlink so etwas wie eine Originaldatei nicht gibt.
Da aber die genannten Anwendungen NL und FSUTIL die Verknüpfungen zu den Originaldateien und die Art der Verknüpfung anzeigen sollten, habe ich der EINFACHHEIT HALBER die Bezeichnung Originaldatei verwendet.

Ich weis natürlich, daß bei einem Softlink (Simlink) an der Verknüpftungsstelle eine eigene Datei erstellt wird, die als Inhalt den Verweis zu verlinkten Datei enthält.
Wird dieser Link aufgerufen, wird über den Link auf die verknüpfte Datei geöffnet / gestartet.

Bei NTFS werden die Dateien nicht so auf dem Datenträger abgespeichert, wie es laut Verzeichniseinträgen (Directory) angezeigt wird. Bei diesem Filesystem werden die Dateien mit einer Systeminternen Bezeichnung auf dem Datenträger abgespeichert. Damit der Anwender eine Datei (File) einfacher finden kann, gibt es für jedes File eine lesbare und merkbare Bezeichnung und eine theoretische Verzeichnissruktur. Diese Einträge werden bei NTFS Inode / FileID genannt.
Da für jede Datei mehrere Inode / FileID erstellt werden können, kann ein File an verschiedenen Verzeichnisorten aufgerufen werden. Es können auch verschiedene Dateinamen (Dateibezeichnungen) verwendet werden.

Betreffend FSUTILS habe ich das Problem, daß mir diese Anwendung NUR die Indode / FileID - also die Hardlinkeinträge - von Dateien anzeigt.
FSUTILS zeigt mir KEINE Hardlinkeinträöge von Verzeichnissen, und KEINE Softlinks von Verzeichnissen und auch KEINE Softlinks von Dateien an.
Vielleicht gibt es einen Parameteraufruf für FSUTIL, den ich nicht kenne.

Was will ich machen?
Verschiedene Anwendungen erwarten diverse Vorlagen oft an verschiedenen Orten, jedoch werden einige Vorlagen oft in mehreren Anwendungen verwendet.
Daher hat sich mit der Zeit eine eigene Verzeichnisstruktur entwickelt.
Damit die Anwendungen trotzdem diese Vorlagen an den zu erwartenden Stellen abfragen können, und diese Vorlagen nicht x-mal an diverse Stellen kopiert werden müssen, werden an diversen Stellen sogenannte Links erstellt.
Um nicht bei jeder Installation überlegen zu müssen, welche Anwendung welche Vorlagen usw. wo erwartet, habe ich begonnen, eine Batchdatei zu erstellen.
Nun könnte es sein, daß an der zu erwartenden Stelle schon eine Datei oder das Verzeichnis vorhanden ist. Trotzdem könnte es sein, daß es sich um eine eigene einzelne Datei / Verzeichnis handelt, und nicht das gewünschte Verzeichnis, die gewünschte Datei angesprochen wird.
Natürlich könnte es auch sein, daß es am Zielort einen Link gibt, dieser Link aber an eine falsche Stelle verweist.

Daher möchte ich in dieser Batchdatei folgendes abfragen.
Gibt es die Zieldatei / das Zielverzeichnis schon?
Ist die vorhandene Zieldatei / das vorhandene Zielverzeichnis eine einzelne eigenständige Datei / ein eigenständiges einzelnes Verzeichnis
Ist der vorhandene Link ein Hardlink oder ein Softlink
Verweist der vorhandene Link an die gewünschte Quelldatei / das gewünschte Quellverzeichnis
Danach weiter mit Abfrage,
ob eventuell vorhandenes gelöscht werden soll, nicht vorhandener Link erstellt werden soll usw.

Da es viele Möglichkeiten gibt, möchte ich so viele Fehlermeldungen wie möglich abfangen und gar nicht auf dem Bildschirm anzeigen lassen.

Durch die Erklärung, was ich mit den Abfragen bezwecke, wurde die Antwort etwas länger.

Gerry
gerry56
gerry56 12.02.2022 um 14:44:29 Uhr
Goto Top
Hallo rubberman.

Ist es möglich, daß Variablen in Batchroutinen Probleme mit dem Zeilenumbruch haben?

Erfolgt die Linkabfrage mit normaler Bildschirmausgabe, kommt folgendes Ergebnis
In 2.933
ERROR: d:Verzeichnis und Datei is not a junction

Wie schon erwähnt, möchte ich die Bildschirmausgaben minimieren.
Um nur die Ausgabe der zweiten Zeile zu erhalten, möchte ich die Ausgabe in eine Variable umleiten und das Ergebnis auswerten.
Hier gibt es aber für mich noch unlösbare Probleme.
Entweder wird die Batchroutine mit Syntaxerror abgebrochen, oder der Variableninhalt ist leer.

Um diesen Fehler zu beenden, müßte ich entweder den Zeilenumbruch vor der Anzeige entfernen, oder nur die Zeile 2 der Bildschirmanzeige in die Variable umleiten.

kann mir jemand die Lösung nennen?

Danke im voraus
Gerry
rubberman
rubberman 12.02.2022 um 16:17:49 Uhr
Goto Top
Was machst du dir denn für Probleme? Ich hab dir doch gezeigt wie die Ausgabe zu verarbeiten ist. Da gibt es keine unerwünschte Ausgabe in die Console.
@echo off &setlocal

set "target=foo"  

if exist "%target%" for %%i in ("%target%") do (  
  set "f=%%~fi"  
  set "attr=%%~ai"  
) else set "f="  

if defined f (set "dir=%attr:~,1%") else set "dir="  

set "lnk=" &set "type="  
for /f "skip=1 tokens=2 delims=>" %%i in ('ln -j "%f%"') do for /f "tokens=*" %%j in ("%%i") do (  
  set "lnk=%%j"  
  set "type=j"  
)

if not defined lnk (
  for /f "skip=1 tokens=2 delims=>" %%i in ('ln -s "%f%"') do for /f "tokens=2 delims=()" %%j in ("%%i") do (  
    set "lnk=%%j"  
    set "type=s"  
  )
)

if not defined lnk (
  for /f "skip=1 delims=" %%i in ('ln -s "%f%"') do (  
    set "lnk=%%i"  
    set "ext=%%~xi"  
  )
)

if defined ext (
  if ":1"=="%ext:~-2%" (  
    set "lnk=%f%"  
    set "type=n"  
  ) else (
    set "lnk=%f%"  
    set "type=h"  
  )
) else if not defined type (
  set "lnk=%f%"  
  set "type=n"  
)


echo dir:  "%dir%" ("d" directory, "_" file)  
echo type: "%type%" ("j" junction, "s" symlink, "h" hardlink, "n" no link)  
echo lnk:  "%lnk%"  
echo(

pause

"target" entsprechend anpassen ...
Reicht dir das an gelieferten Informationen? (Und erzähl mir nicht dass bei einem Hardlink nun %target% ausgegeben wird. Das ist und bleibt vollkommen egal ...)

Steffen
gerry56
gerry56 12.02.2022 um 19:12:48 Uhr
Goto Top
Hallo rubberman!

Vorerst Danke für die Zusendung des Quelltextes.
Als ich mir diesen Quelltext angesehen habe, dachte ich, super, das ist genau das, was ich will.
Ein Abfragescript für alle 4 Link-Varianten und 1 einheitliche Ausgabeart für alle 4 Link-Varianten.

Zum Testen habe ich mit dem Programm mklink und mit dem Programm LN Softlinks und ´Hardlinks von Dateien und Verzeichnissen erstellt.
Das Ergebnis habe ich mit dem DIR-Befehl der DOSBox (Command), mit dem Windows Explorer und mit dem Total Commander überprüft.

Leider liefert das Script falsche Ergebnisse.
Bei allen 4 Linkvarianten wir NUR der Speicherort vom Link RICHTIG angegeben.
Der Zielspeicherort - bei Hardlink der erste Inodeeintrag - wird falsch angezeigt, da jenes Verzeichnis angezeigt wird, in welchem der Batch ausgeführt wird.

Bei Linkart wird NUR Hardlink für eine Datei richtig angezeigt, statt Symlink für eine Datei wird falsch Hardlink angezeigt. Verlinkte Verzeichnisse (Directorys) werden bei Hardlink und bei Softlink FALSCH als NO LINK angezeigt.

Bei Directory / File wird immer FALSCH ~,1 angezeigt.

Schade, aber trotzdem Danke für die Mühe
Ach ja. Die Testdateien und Testverzeichnisse werden mit dem Tool NL AUCH NUR für Hardlink und Softlink von Verzeichnissen und Softlink für Dateien RICHTIG erkannt.
Das Tool NL erkennt KEINE Hardlinks von Dateien.
Für Hardlinks von Dateien benötige ich das Tool FSUTIL.
Da ich eben 2 Tools mit 4 Abfragevarianten benötige, gibt es pro Abfrage 3 Fehlermeldungen, die ich abfangen möchte.

Leider wurde daher das Problem noch immer nicht gelöst

Gerry
rubberman
rubberman 12.02.2022 um 19:41:44 Uhr
Goto Top
Hab das übrigens getestet und funktioniert für mich.
Fehlermeldungen zu StdErr gehen per 2>nulins Nirvana, wenn du das irgendwo brauchen solltest.
Ich bin an der Stelle auch raus. Keine Ahnung wie ich dir noch helfen kann.

Steffen
gerry56
gerry56 12.02.2022 um 19:55:51 Uhr
Goto Top
Hallo steffen
Die Umleitung mit >nul ins Nirvna kenne ich.

Nur für die Inhaltsauswertung benötige ich die Umleitung in eine Variable.
Wenn ich die Ausgabe in eine Datei umleite, habe ich das Ergebnis und kann den Wert Zeilenweise in eine Variable für die Auswertung einlesen.

Will ich die Ausgabe in eine Variable umleiten hat offensichtlich die Batchdatei Probleme, wenn der Inhalt über mehr als 1 Zeile geht oder / und wenn es einen Zeilenumbruch gibt.

Wieso das Script bei dir funktioniert und bei mir nicht, kann ich nicht beantworten.
Ich arbeite aktuell mit Win-7 bis Win-8.1 und vereinzelt mit Win-XP.
Die Testmaschine hat Win-7 64Bit

Trotzdem Danke für deine Mühe
Ein schönes Restwochenende
Gerry
rubberman
rubberman 12.02.2022 um 20:44:00 Uhr
Goto Top
Die Umleitung mit >nul ins Nirvna kenne ich.
Das leitet das StdOut um. Ich habe von 2>nulfür das StdErr gesprochen.

Nur für die Inhaltsauswertung benötige ich die Umleitung in eine Variable.
FOR /F, wie in meinen Beispielen. Wenn du das StdErr nicht sehen willst, dann oben genannte Umleitung (innerhalb der Kommandozeile im Schleifenkopf maskiert zu 2^>nul). Und wenn du StdErr mit StdOut verbinden willst um beides zu verarbeiten, dann 2>&1(maskiert zu 2^>^&1 im Schleifenkopf.

Will ich die Ausgabe in eine Variable umleiten hat offensichtlich die Batchdatei Probleme, wenn der Inhalt über mehr als 1 Zeile geht oder / und wenn es einen Zeilenumbruch gibt.
Die erste Zeile brauchst du nicht. Darum gibt es das "skip=1" in den FOR /F Schleifen.

Steffen
gerry56
gerry56 14.02.2022 um 22:07:44 Uhr
Goto Top
Hallo Steffen!

Entschuldige bitte, daß ich mich erst jetzt melde.
Mußte einiges erledigen und hatte daher keine Zeit, die Nachrichten durchzulesen.

Danke auf jeden Fall dafür, daß du diese 3 Hinweise geschickt hast.
In diesem Beiträgen erklärst du mir einiges, das mir bisher unklar war.
Morgen am Abend werde ich mich wieder mit der Batch beschäftigen und deine Erklärungen in meine Problemlösung einfließen lassen.
Wäre doch gelacht, wenn dieses Problem nicht gelöst werden kann.
Probleme sind doch dazu da, um gelöst zu werden.

Ich werde auf jeden Fall vom Ergebnis berichten.
Gerry
rubberman
rubberman 15.02.2022 aktualisiert um 23:22:18 Uhr
Goto Top
Wenn alle Stricke reißen, schreib ich dir eben ein kleines Tool in C das die Ziele von allen möglichen Arten von Links ausgibt. Das sind vielleicht 200 Zeilen Code netto und ist in 'ner Stunde erledigt. Einziger Knackpunkt sind Hardlinks. Da müsste ich mir überlegen, wie das aussehen kann, damit es deinen Vorstellungen entspricht. Der Begriff "Hardlink" ist halt missverständlich. Es ist einfach kein Link. Oder, umgekehrt ausgedrückt, auch eine "normale" Datei ist bereits ein Hardlink, halt mit nur einem Pfad der die physische Datei referenziert. Nach allem was ich von dir gelesen habe, scheint es so, dass du unbedingt irgendeine Referenz (oder alle anderen Referenzen) ausgegeben bekommen willst, die halt nicht die übergebene Referenz ist.

Steffen

EDIT
Hab das kurz zusammen geschrieben. wetransfer link, bei Interesse:
https://we.tl/t-hfWMmt9Kv5