2013-07-16 2 views
8

У меня возникла ситуация, когда я хочу сохранить исходные атрибуты в файле (дату создания файла и т. Д.). Обычно, когда вы копируете файлы в Windows, копия, которую вы создаете, получает новые «измененные» даты и т. Д. Я пришел через команду shutil.copy, хотя это не сохраняет атрибуты файлов одинаковыми.Сохранение атрибутов файлов в копии

Я нашел following question on Stack Unix, но мне было интересно, если бы был способ сделать это в Python.

ответ

16

Если вы посмотрите на документацию для shutil, вы сразу найти функцию copy2, которая:

copy() Идентично за исключением того, что copy2() также пытается сохранить все файловые метаданные.

В последних версиях Python, есть целая куча функций, делать биты и куски этого copy, в отдельности следующее: copymode, copystat бут, если вы просто хотите, чтобы скопировать все, copy2 делает все возможное.

Как предупреждает в верхней части документации, «все возможное» не означает все, но оно включает даты и другие атрибуты. В частности:

В Windows владельцы файлов, ACL и альтернативные потоки данных не копируются.

Если вам действительно нужно включить даже этот материал, вам необходимо получить доступ к API Win32 (что проще всего сделать через pywin32). Но вы этого не сделаете.

+0

Блестящий - хорошее старое окуляра !! : D –

+0

Если вы внимательно прочитали документы, вы заметите, что 'copy2' должен был быть эквивалентен' cp -p' (это то, что вы хотели), но на самом деле он не может эмулировать это в Windows (из-за проблема с владением файлом), поэтому вместо этого они говорят, что он копирует «все возможное» и документирует, что это значит. Во всяком случае, для вашего случая использования это не имеет значения, но будущие читатели могут ввести в заблуждение, поэтому я отредактировал ответ. – abarnert

+0

Это может быть актуально. Я работаю над инструментом forensics (который позволит мне копировать файлы из одной директории в другую). –