2013-07-16 28 views
8

Ho la situazione in cui voglio mantenere gli attributi originali su un file (la data di creazione del file ecc.). Normalmente quando si copiano i file in Windows, la copia che si ottiene ha nuove date "modificate" ecc. Sono arrivato attraverso il comando shutil.copy - sebbene questo non mantenga gli attributi del file uguali.Mantenere gli attributi di file su una copia

Ho trovato il following question on Stack Unix, ma mi chiedevo se c'era un modo per farmi fare questo in Python.

risposta

16

Se si guarda la documentazione per shutil, troverete subito la funzione copy2, che è:

Identica a copy() tranne che copy2() tenta anche di conservare tutti i metadati del file.

Nelle versioni recenti di Python, c'è tutta una serie di funzioni per fare i pezzi di questo separatamente- copy, copymode, copystat -ma se si desidera solo per copiare tutto, copy2 fa tutto il possibile.

Come dice l'avvertenza in cima alla documentazione, "tutto il possibile" non significa tutto, ma include le date e altri attributi. In particolare:

Su Windows, i proprietari di file, gli ACL e i flussi di dati alternativi non vengono copiati.

Se è davvero necessario includere anche quella roba, sarà necessario accedere all'API Win32 (operazione più semplice da eseguire tramite pywin32). Ma tu no.

+0

Brillante - buona vecchia doucmentation !! : D –

+0

Se leggi attentamente i documenti, noterai che 'copy2' doveva essere equivalente a' cp -p' (che è quello che volevi), ma in realtà non può emularlo su Windows (a causa di il problema della proprietà dei file), quindi dicono che copia "tutto il possibile" e documenta cosa significa. Ad ogni modo, per il tuo caso d'uso, non importa, ma i futuri lettori potrebbero essere fuorvianti, quindi ho modificato la risposta. – abarnert

+0

Potrebbe essere rilevante. Sto lavorando a uno strumento forense (che mi permetterà di copiare file da una directory all'altra). –

Problemi correlati