Come posso trovare hard link su Windows?


33

Ho creato alcuni collegamenti reali sul mio file system di Windows 7 usando mklink. È stato qualche tempo fa e non ricordo per certo dove o quali file. Quando uso Explorer, tutti i file sembrano uguali. Quando uso la riga di comando e digito "dir", sembrano tutti uguali.

Come trovo i collegamenti fisici? O come posso determinare se un file specifico È un collegamento reale?

Risposte:


33

Tutti i file sono collegamenti reali, con un numero di collegamenti pari ad almeno 1.

Questo è il motivo per cui i file sembrano uguali. Essi sono la stessa cosa. Quello che sembra cercare sono i file in cui sono presenti più collegamenti al file. C'è ben poco che distingue un file con un conteggio dei collegamenti maggiore di uno da un file con un conteggio dei collegamenti di uno ... eccetto il conteggio dei collegamenti (e qualche comportamento strano rispetto agli attributi e agli indicatori di data).

E questo è facile da controllare con il findcomando che si trova nel toolkit di utilità SFUA di Microsoft , che viene eseguito nel sottosistema per applicazioni basate su Unix :

trova . -link +1


9
proprio come una nota, anche cygwin / bin / find funziona. Grazie!
arcyqwerty,

6
Giusto per essere chiari il "Microsoft find" a cui fa riferimento la soluzione qui non è il Windows 7. predefinito installato. Devi scaricare e installare un nuovo Microsoft find. Quindi è possibile utilizzare tale findutilità. O installa il findcomando di Cygwin come @arcyqwerty (che probabilmente avrà un supporto migliore a lungo termine).
Trevor Boyd Smith,

2
Può anche usare il built-in fsutil hardlink list filename. (vedi la risposta di Sergey )
Svish,

28

Su Windows 7, usa il comando:

fsutil hardlink list MyFileName.txt

Elenca tutti i collegamenti a file con nome MyFileName.txt.


Nota che devi essere amministratore per eseguire fsutil.
Alastair Maw,

2
@AlastairMaw Su almeno Windows 10 non è necessario essere un amministratore per eseguire quel particolare comando. O funziona come amministratore senza UAC? (cioè solo il gruppo senza elevazione effettiva)
Paul Stelian,

9

Sfortunatamente, non c'è modo per il sistema operativo di trovare tutti i tuoi hardlink senza guardare ogni file.

Per Explorer, puoi scaricare l'utilissima estensione Shell di collegamento , che sovrappone i file con hardlink con una freccia rossa simile a un collegamento.

Inoltre, è abbastanza semplice creare hardlink, symlink e giunzioni attraverso il menu contestuale di Explorer.

Chiacchiere bonus:

Tecnicamente, tutti i file sono hardlink. Quindi, stai davvero cercando file con più di un hardlink.


1
In realtà lo è. Vedi la risposta di Sergey .
Svish,

1
La risposta di Sergey funziona per la seconda parte della domanda, ma non per la prima.
surfasb,

3

usa finddupe :

finddupe -listlink c:\photos

-listlink Mette finddupe in modalità di ricerca hardlink. In questa modalità, finddupe elencherà quali gruppi di file sono collegati tra loro. Tutte le istanze hardlink di un file sono mostrate insieme. Tuttavia, finddupe può trovare solo istanze del file hardlinked che si trovano nel percorso di ricerca.
Shayan

3

 Un modo semplice per i controlli una tantum: gli attributi dei file cambiano insieme?

Se si desidera verificare se i file Ae i Bcollegamenti fisici allo stesso contenuto e non si desidera installare o eseguire nulla, aprire la finestra Proprietà del file Ae attivare, ad esempio, l' attributo di sola lettura . Ora apri la finestra Proprietà del fileB per vedere se la modifica dell'attributo (del file A) è avvenuta anche qui. Se sì, la risposta è positiva.

Perché questo funziona? Perché i collegamenti reali correlati condividono lo stesso set di attributi di file e timestamp.

Detto questo, lo stesso test può essere eseguito con timestamp di file, ma non possono essere modificati facilmente come flag di sola lettura per eseguire il controllo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.