2013-07-16 9 views
8

Mam sytuację, w której chcę zachować oryginalne atrybuty w pliku (data utworzenia pliku itp.). Zwykle podczas kopiowania plików w systemie Windows tworzona kopia dostaje nowe "zmodyfikowane" daty itd. Przeszedłem przez komendę shutil.copy - chociaż nie zachowuje ona atrybutów pliku tak samo.Przechowywanie atrybutów pliku na kopii

Znalazłem following question on Stack Unix, ale zastanawiałem się, czy istnieje sposób, aby to zrobić w Pythonie.

Odpowiedz

16

Jeśli spojrzeć na dokumentacji shutil, będziesz natychmiast znaleźć funkcję copy2, czyli:

Identyczne copy() oprócz tego copy2() również próbuje zachować wszystkie metadane pliku.

W ostatnich wersjach Pythona, istnieje cały zabił funkcji robić kawałki tej separately- copy, copymode, copystat -ale jeśli chcesz po prostu skopiować wszystko, copy2 robi wszystko, co możliwe.

Ostrzeganie na górze dokumentacji mówi, że "wszystko co możliwe" nie oznacza wszystkiego, ale zawiera daty i inne cechy. W szczególności:

W systemie Windows właściciele plików, listy ACL i alternatywne strumienie danych nie są kopiowane.

Jeśli naprawdę trzeba to nawet takie rzeczy, trzeba będzie uzyskać dostęp do API Win32 (co jest najłatwiej zrobić poprzez pywin32). Ale ty nie.

+0

Genialny - dobry stary doucmentation !! : D –

+0

Jeśli uważnie czytasz dokumenty, zauważysz, że 'copy2' miało być równoważne' cp -p' (co jest tym czego chciałeś), ale tak naprawdę nie może emulować tego w systemie Windows (z powodu problem własności pliku), więc zamiast tego mówią, że kopiuje "wszystko co możliwe" i dokumentuje, co to oznacza. W każdym razie, dla twojego przypadku użycia, to nie ma znaczenia, ale przyszli czytelnicy mogą być wprowadzeni w błąd, więc zredagowałem odpowiedź. – abarnert

+0

To może być istotne. Pracuję nad narzędziem kryminalistycznym (które pozwoli mi kopiować pliki z jednego do drugiego). –

Powiązane problemy