Domanda

Ho uno script Perl che deve eliminare una directory con tutto il suo contenuto.A volte questa directory contiene un punto di giunzione in un'altra directory.Se io rmtree() ingenuamente, il rmtree() La chiamata eliminerà anche tutti i file all'interno della cartella di destinazione della giunzione.Sto cercando un modo per non farlo e invece rimuovo semplicemente la giunzione.

Sarebbero apprezzate anche soluzioni non Perl.

È stato utile?

Soluzione

Ho appena digitato "punto di giunzione" su Google e ho trovato la strada per farlohttp://en.wikipedia.org/wiki/NTFS_giunzione_punto

Prompt dei comandi (cmd.exe)

  • Il comando DIR in Windows 2000 o successivo riconosce i punti di giunzione, visualizzando anziché negli elenchi di directory (usa DIR con l'interruttore della riga di comando /a o /al).
  • Tutti i comandi che normalmente influenzerebbero i file all'interno di una directory normale agiranno lo stesso qui.Pertanto, il comando del myjunction non dovrebbe essere utilizzato: questo eliminerà solo tutti i file nella directory target.
  • I comandi RMDIR e la mossa funzionano bene con le giunzioni, con l'avvertenza che la mossa non permette alla giunzione di passare a un altro volume (al contrario di Windows Explorer, come menzionato sopra.)
  • Il comando RMDIR è sicuro in quanto elimina solo il punto di giunzione, non i file mirati.Mentre si cammina attraverso la directory con l'interfaccia della riga di comando, i file possono essere eliminati, ma a differenza di Explorer, le directory possono anche essere eliminate (utilizzando ad esempio RMDIR /S Dirname.)
  • L'uso del comando Linkd con l'interruttore /D è un modo sicuro per eliminare i punti di giunzione.

Da quello che posso vedere puoi, ad esempio, usare dir e grep l'output per <JUNCTION> o utilizzare Windows rmdir.Penso che tu possa usare uno di questi da Perl via system.

Altri suggerimenti

Per scoprire dove sono i punti di analisi (o "punti di giunzione", se preferisci):

dir /a:l /b > myjunctions.txt

Mostrerà tutti i punti di analisi nella directory corrente.Puoi aggiungere /s, ma fai attenzione che verranno elencati anche i punti di analisi all'interno dei punti di analisi.

Supponiamo che myconnections.txt contenga la riga x:\subdir\foo.Per rimuoverlo, emetti

fsutil reparsepoint "x:\subdir\foo"

E voilà!Il tuo punto di giunzione è scomparso e la directory originale è intatta!

L'utilità FastCopy fa questo: http://ipmsg.org/tools/fastcopy.html.en

Sto utilizzando questo programma per copiare o eliminare cartelle che potrebbero contenere giunzioni come sottocartelle in modo che le destinazioni delle giunzioni rimangano intatte.I punti di giunzione vengono copiati correttamente durante la copia, anche quando l'unità di destinazione è diversa.

Esplora risorse, almeno in Windows 7 Ultimate, funziona come desiderato anche durante l'eliminazione: le destinazioni di giunzione rimangono intatte.

Ma la copia di cartelle che contengono giunzioni come sottocartelle in Explorer continua a non funzionare come previsto: in realtà fa qualcosa che forse non riesco ancora a descrivere del tutto:le cartelle di giunzione sembrano essere copiate come cartelle normali, ma il loro contenuto è vuoto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top